sql >> Databáze >  >> RDS >> Sqlserver

Použití výstupních parametrů uložené procedury v C#

Mírně jsem upravil vaši uloženou proceduru (pro použití SCOPE_IDENTITY ) a vypadá to takto:

CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber)

    SELECT @NewId = SCOPE_IDENTITY()
END

Zkoušel jsem to a funguje to dobře (s touto upravenou uloženou procedurou):

// define connection and command, in using blocks to ensure disposal
using(SqlConnection conn = new SqlConnection(pvConnectionString ))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
        
    // set up the parameters
    cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7);
    cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;

    // set parameter values
    cmd.Parameters["@ContractNumber"].Value = contractNumber;

    // open connection and execute stored procedure
    conn.Open();
    cmd.ExecuteNonQuery();

    // read output value from @NewId
    int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
    conn.Close();
}

Funguje to i ve vašem okolí? Nemohu říci, proč váš původní kód nebude fungovat – ale když to udělám zde, VS2010 a SQL Server 2008 R2, funguje to bezchybně....

Pokud nedostanete zpět hodnotu - pak mám podezření, že vaše tabulka Contracts nemusí ve skutečnosti obsahovat sloupec s IDENTITY majetek na něm.



  1. Java Crosstab - připravený dotaz na příkaz

  2. Jak generovat skripty DDL (vytvořit) z SQL Server Management Studio (SSMS) - SQL Server / Výukový program TSQL, část 17

  3. Jak zrušit omezení cizího klíče v databázi SQL Server - SQL Server / TSQL výukový program, část 75

  4. Získat všechny názvy tabulek konkrétní databáze pomocí SQL dotazu?