Beim Aufrufen einer gespeicherten Prozedur, die einen Wert in C# zurückgibt, ist es entscheidend, den Rückgabewert im Code korrekt zu verarbeiten. Dieser Artikel beschreibt dieses Problem und bietet eine Lösung zum erfolgreichen Abrufen von Rückgabewerten aus gespeicherten Prozeduren.
Eine C#-Anwendung muss eine gespeicherte Prozedur aufrufen, die den nächsten Wert in einer Sequenz zurückgibt. Obwohl ich die Lösungen online verfolge, kann ich den Rückgabewert immer noch nicht abrufen. Der bereitgestellte Codeausschnitt umfasst das Erstellen eines SqlCommand-Objekts, das Angeben der gespeicherten Prozedur als Befehlstext und die Verwendung einer SqlConnection zum Ausführen des Befehls. Der Rückgabewert der gespeicherten Prozedur wird jedoch nicht abgerufen.
<code class="language-sql">ALTER procedure [dbo].[usp_GetNewSeqVal] @SeqName nvarchar(255) as begin declare @NewSeqVal int set NOCOUNT ON update AllSequences set @NewSeqVal = CurrVal = CurrVal+Incr where SeqName = @SeqName if @@rowcount = 0 begin print 'Sequence does not exist' return end return @NewSeqVal end</code>
<code class="language-csharp">SqlConnection conn = new SqlConnection(getConnectionString()); conn.Open(); SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param = new SqlParameter(); param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar); param.Direction = ParameterDirection.Input; param.Value = "SeqName"; SqlDataReader reader = cmd.ExecuteReader();</code>
Um den Rückgabewert der gespeicherten Prozedur zu erhalten, müssen Sie dem SqlCommand-Objekt einen Parameter mit der ReturnValue-Richtung hinzufügen. Dadurch wird der Befehl angewiesen, eine Variable zu deklarieren und ihr den Rückgabewert der gespeicherten Prozedur zuzuweisen. Der folgende Code demonstriert die Lösung:
<code class="language-csharp">using (SqlConnection conn = new SqlConnection(getConnectionString())) using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = parameterStatement.getQuery(); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("SeqName", "SeqNameValue"); // @ReturnVal 可以是任何名称 var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int); returnParameter.Direction = ParameterDirection.ReturnValue; conn.Open(); cmd.ExecuteNonQuery(); var result = returnParameter.Value; }</code>
Das obige ist der detaillierte Inhalt vonWie rufe ich Rückgabewerte gespeicherter Prozeduren in C# ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!