【问题标题】:C# Getting Return Value from Stored Procedure Is Not WorkingC# 从存储过程中获取返回值不起作用
【发布时间】:2013-09-18 21:46:53
【问题描述】:

我正在尝试运行一个返回单个整数值的存储过程,但我不知道它哪里出错了。从我读过的内容来看,以下内容应该可以工作,但不能,而且我看不出哪里出错了。

这是我的存储过程:

    ALTER PROCEDURE [dbo].[getDDNTempID]
    AS
    BEGIN
        declare @tempID int

        select top 1 @tempID = tempID from tblDDNHdr order by tempID asc
        if @tempID is null
            return 0
        else
            return @tempID
    END

这是我尝试获取返回值的代码:

        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["test"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand("getDDNTempID", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection.Open();
            Int32 tempID = (Int32)cmd.ExecuteScalar();
            if (tempID == 0) { tempID = -1; }
            return tempID;
        }

当这个过程被调用时,我得到一个 NullReferenceException 并且给出错误的行是:

            Int32 tempID = (Int32)cmd.ExecuteScalar();

如果你们能提供任何指导,我将不胜感激。

谢谢

【问题讨论】:

标签: c# sql-server stored-procedures


【解决方案1】:

SQL Server 中的返回函数专门用于将完成代码返回给调用函数。因此,可返回的值是有限的。您需要做的是 SELECT@tempID 并将其视为结果集。

【讨论】:

  • 我尝试了您描述的内容并更改了我的存储过程,它运行良好 - 谢谢。我没有意识到返回函数的局限性
【解决方案2】:

ExecuteScalar 返回结果第一行第一列的值。您的存储过程不返回结果集。

SqlCommand.Parameters 集合添加一个参数并将Direction 设置为ReturnValue。它将接收存储过程的返回值。

请注意,返回值仅用于返回状态。您应该使用OUTPUT 参数返回@TempId

【讨论】:

  • 我也试过这个解决方案,效果也很好。我猜不止一种给猫剥皮的方法。 (为什么人们总要给猫剥皮?)
猜你喜欢
  • 1970-01-01
  • 2010-10-16
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多