Heim > Backend-Entwicklung > C++ > Wie kann ich Ausgabeparameter erfolgreich aus einer gespeicherten SQL Server-Prozedur in C# abrufen?

Wie kann ich Ausgabeparameter erfolgreich aus einer gespeicherten SQL Server-Prozedur in C# abrufen?

DDD
Freigeben: 2025-01-10 09:09:40
Original
290 Leute haben es durchsucht

How Can I Successfully Retrieve Output Parameters from a SQL Server Stored Procedure in C#?

Verwendung gespeicherter Prozedurausgabeparameter in C#

Frage

Die Rückgabe von Ausgabeparametern aus einer gespeicherten SQL Server-Prozedur in eine C#-Variable kann eine Herausforderung sein. Obwohl sie verschiedene Empfehlungen befolgen, melden viele Entwickler immer noch Nullwerte oder andere Probleme.

Gespeicherte Prozedur

Betrachten Sie die folgende gespeicherte Prozedur usp_InsertContract, die dazu dient, eine Vertragsnummer in die Datenbank einzufügen und den Primärschlüssel als Ausgabeparameter zurückzugeben:

<code class="language-sql">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</code>
Nach dem Login kopieren

Datenbank öffnen

Öffnen Sie die Datenbankverbindung mit dem folgenden Code:

<code class="language-csharp">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;
}</code>
Nach dem Login kopieren

Befehl ausführen

Führen Sie die gespeicherte Prozedur mit dem folgenden Code aus:

<code class="language-csharp">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);
}</code>
Nach dem Login kopieren

Lösung

Verwenden Sie SCOPE_IDENTITY(), um den Primärschlüssel abzurufen und einige Änderungen an der gespeicherten Prozedur vorzunehmen, um das Nullwertproblem zu lösen:

<code class="language-sql">CREATE PROCEDURE usp_InsertContract
    @ContractNumber varchar(7),
    @NewId int OUTPUT
AS
BEGIN
    INSERT INTO [dbo].[Contracts] (ContractNumber)
    VALUES (@ContractNumber);
    SELECT @NewId = SCOPE_IDENTITY();
END</code>
Nach dem Login kopieren

Um diese geänderte gespeicherte Prozedur in C# zu verwenden, implementieren Sie den folgenden Code:

<code class="language-csharp">using(SqlConnection conn = new SqlConnection(pvConnectionString))
using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7).Value = contractNumber;
    cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;
    conn.Open();
    cmd.ExecuteNonQuery();
    int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
    conn.Close();
}</code>
Nach dem Login kopieren

Dieser Code ruft den von der gespeicherten Prozedur zurückgegebenen Primärschlüssel erfolgreich ab und gibt ihn aus.

Das obige ist der detaillierte Inhalt vonWie kann ich Ausgabeparameter erfolgreich aus einer gespeicherten SQL Server-Prozedur in C# abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage