C# 从存储过程获取返回值不起作用
本文关键字:返回值 不起作用 获取 存储过程 | 更新日期: 2023-09-27 18:32:05
我正在尝试运行一个返回单个整数值的存储过程,但我无法弄清楚它出了问题。从我所读到的内容来看,以下内容应该有效,但不是,我看不出我哪里出了问题。
这是我的存储过程:
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();
我将不胜感激你们能提供的任何指导。
谢谢
SQL Server 中的返回函数专门用于将完成代码返回给调用函数。因此,可返回的值是有限的。相反,您需要做的是SELECT
@tempID并将其视为结果集。
ExecuteScalar
返回结果第一行的第一列的值。存储过程不返回结果集。
将参数添加到SqlCommand.Parameters
集合,并将Direction
设置为 ReturnValue
。 它将从存储过程接收返回值。
请注意,返回值仅用于返回状态。您应该使用 OUTPUT
参数返回@TempId
。