首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用返回值调用存储过程

使用返回值调用存储过程
EN

Stack Overflow用户
提问于 2011-06-02 11:22:12
回答 8查看 272.1K关注 0票数 87

我正在尝试从我的C# windows应用程序调用存储过程。存储过程正在SQL Server 2008的本地实例上运行。我可以调用存储过程,但无法从存储过程中检索回值。此存储过程应返回序列中的下一个数字。我已经在网上做了研究,我看到的所有网站都指出这个解决方案是有效的。

存储过程代码:

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

调用存储过程的代码:

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();

我还尝试使用DataSet检索具有相同结果的返回值。在从我的存储过程中获取返回值时,我遗漏了什么?如果需要更多信息,请让我知道。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-06-02 11:27:48

您需要在命令中添加返回参数:

using (SqlConnection conn = new SqlConnection(getConnectionString()))
using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = parameterStatement.getQuery();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("SeqName", "SeqNameValue");

    var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
    returnParameter.Direction = ParameterDirection.ReturnValue;

    conn.Open();
    cmd.ExecuteNonQuery();
    var result = returnParameter.Value;
}
票数 174
EN

Stack Overflow用户

发布于 2014-09-05 05:00:46

我知道这很古老,但我在谷歌上偶然发现了它。

如果你的存储过程中有一个返回值,那么就说"Return 1“--不要使用输出参数。

您可以执行以下操作--将"@RETURN_VALUE“静默添加到每个命令对象中。不需要显式添加

    cmd.ExecuteNonQuery();
    rtn = (int)cmd.Parameters["@RETURN_VALUE"].Value;
票数 5
EN

Stack Overflow用户

发布于 2016-11-07 20:50:30

我机器上的EnterpriseLibrary版本还有其他参数。这是有效的:

        SqlParameter retval = new SqlParameter("@ReturnValue", System.Data.SqlDbType.Int);
        retval.Direction = System.Data.ParameterDirection.ReturnValue;
        cmd.Parameters.Add(retval);
        db.ExecuteNonQuery(cmd);
        object o = cmd.Parameters["@ReturnValue"].Value;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6210027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档