在C#中呼叫傳回值的預存程序時,正確處理程式碼中的回傳值至關重要。本文介紹了這個問題,並提供了一個成功從預存程序檢索傳回值的解決方案。
一個C#應用程式需要呼叫一個傳回序列中下一個值的預存程序。儘管遵循了網路上的解決方案,但仍然無法檢索回傳值。提供的程式碼片段包括建立SqlCommand對象,將預存程序指定為命令文本,並使用SqlConnection執行命令。但是,預存程序的回傳值並沒有被取得。
<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>
要取得預存程序的回傳值,需要在SqlCommand物件新增一個具有ReturnValue方向的參數。這指示命令聲明一個變數並將預存程序的回傳值賦值給它。以下程式碼示範了此解決方案:
<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>
以上是如何在 C# 中檢索預存程序的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!