首页 >后端开发 >C++ >如何在 C# 中检索存储过程的返回值?

如何在 C# 中检索存储过程的返回值?

Susan Sarandon
Susan Sarandon原创
2025-01-20 01:32:08793浏览

How to Retrieve Stored Procedure Return Values in C#?

在C#中检索存储过程返回值

在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>

调用存储过程的C#代码

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn