C#从存储过程获取返回值不起作用

时间:2013-09-18 21:46:53

标签: c# sql-server stored-procedures

我试图运行一个存储过程返回一个整数值,我无法弄清楚它出错的地方。根据我的阅读,以下内容应该有效但不是,我无法看到我出错的地方。

这是我的存储过程:

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

我很感激你们给予的任何指导。

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

将参数添加到SqlCommand.Parameters集合,并将Direction设置为ReturnValue。它将从存储过程中接收返回值。

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