sql >> Database >  >> RDS >> Sqlserver

Uitvoerparameters voor opgeslagen procedures gebruiken in C#

Ik heb je opgeslagen procedure enigszins aangepast (om SCOPE_IDENTITY te gebruiken) ) en het ziet er zo uit:

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

    SELECT @NewId = SCOPE_IDENTITY()
END

Ik heb dit geprobeerd en het werkt prima (met die gewijzigde opgeslagen procedure):

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

Werkt dit ook in jouw omgeving? Ik kan niet zeggen waarom je originele code niet zal werken - maar als ik dit hier doe, VS2010 en SQL Server 2008 R2, werkt het gewoon feilloos....

Als u geen waarde terugkrijgt, vermoed ik dat uw tabel Contracts heeft misschien niet echt een kolom met de IDENTITY eigendom erop.



  1. Prestatiemeteritems bewaken via PERFMON | Problemen met SQL Server-prestaties oplossen -3

  2. Rangfunctie in MySQL

  3. Back-up van een database in SQL Server 2017

  4. Hoe de standaardwaarde van de kolom in MySQL te verwijderen?