Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на изходни параметри на съхранената процедура в C#

Леко промених вашата съхранена процедура (за да използвате SCOPE_IDENTITY ) и изглежда така:

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

    SELECT @NewId = SCOPE_IDENTITY()
END

Опитах това и работи добре (с тази модифицирана съхранена процедура):

// 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();
}

Това работи ли и във вашата среда? Не мога да кажа защо оригиналният ви код няма да работи - но когато направя това тук, VS2010 и SQL Server 2008 R2, той просто работи безупречно....

Ако не получите обратно стойност - тогава подозирам, че вашата таблица Contracts може наистина да няма колона с IDENTITY собственост върху него.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да идентифицираме дублирането на първичния ключ от код за грешка на SQL Server 2008?

  2. Как да получите стойности на колона за идентичност, без да споменавате името на колоната за идентичност в Select - SQL Server / T-SQL Урок, част 46

  3. Как да промените размера на колона в SQL Server (T-SQL)

  4. STRING_SPLIT() в SQL Server 2016:Продължение №1

  5. Каква е разликата между Float и числово/десетично в SQL Server - SQL Server / T-SQL Урок, част 33