在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中文网其他相关文章!