Ausgabeparameter für gespeicherte Prozeduren in C # verwenden

Ich habe ein Problem beim Zurückgeben eines Ausgabeparameters von einer gespeicherten SQL Server-Prozedur in eine C # -Variable. Ich habe die anderen Beiträge zu diesem Thema nicht nur hier, sondern auch auf anderen Websites gelesen und kann es nicht zum Laufen bringen. Folgendes habe ich derzeit. Momentan versuche ich nur, den Wert zu drucken, der zurückkommt. Der folgende Code gibt einen Nullwert zurück. Was ich versuche zurückzugeben, ist der Primärschlüssel. Ich habe versucht mit@@IDENTITY undSCOPE_INDENTITY() (d. h.SET @NewId = SCOPE_IDENTITY()).

Gespeicherte Prozedur:

CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),

    @NewId int OUTPUT
AS
BEGIN

    INSERT into [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber)

    Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber
END

Öffnen der Datenbank:

pvConnectionString = "Server = Desktop-PC\\SQLEXPRESS; Database = PVDatabase; User ID = sa;
    PASSWORD = *******; Trusted_Connection = True;";

try
{
    pvConnection = new SqlConnection(pvConnectionString);
    pvConnection.Open();
}
catch (Exception e)
{
    databaseError = true;
}

Befehl ausführen:

pvCommand = new SqlCommand("usp_InsertContract", pvConnection);

pvCommand.Transaction = pvTransaction;
pvCommand.CommandType = CommandType.StoredProcedure;    

pvCommand.Parameters.Clear();
pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));

SqlParameter pvNewId = new SqlParameter();
pvNewId.ParameterName = "@NewId";
pvNewId.DbType = DbType.Int32;
pvNewId.Direction = ParameterDirection.Output;
pvCommand.Parameters.Add(pvNewId);

try
{
    sqlRows = pvCommand.ExecuteNonQuery();

    if (sqlRows > 0)
        Debug.Print("New Id Inserted =  ", 
            pvCommand.Parameters["@NewId"].Value.ToString()); 
    }
    catch (Exception e)
    {
        Debug.Print("Insert Exception Type: {0}", e.GetType());
        Debug.Print("  Message: {0}", e.Message);
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage