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