使用sqlCommand.ExecuteNonQuery()返回范围标识
本文关键字:返回 范围 标识 sqlCommand ExecuteNonQuery 使用 | 更新日期: 2023-09-27 18:17:38
我有一个如下所示的存储过程:
ALTER PROCEDURE dbo.addPackage(
@PackageStatus VARCHAR(50) = null,
@OrgCode VARCHAR(50) = null,
@SystemID VARCHAR(50) = null,
@ID int OUTPUT
)
AS
BEGIN
insert into package_table
(
PackageStatus,
OrgCode,
SystemID
)
values
(@PackageStatus,
@OrgCode,
@SystemID
)
SET @ID = SCOPE_IDENTITY()
END
我的函数将以下参数添加到sql命令并调用sqlCommand.ExecuteNonQuery();
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@PackageStatus", package.PackageStatus));
parameters.Add(new SqlParameter("@OrgCode", package.OrgCode));
parameters.Add(new SqlParameter("@SystemID", package.SystemID));
SqlParameter outParameter = new SqlParameter("@ID", SqlDbType.Int);
outParameter.Direction = ParameterDirection.Output;
parameters.Add(outParameter);
,但我一直从存储过程得到一个0返回,即使我有一个out参数声明,并在存储过程退出之前设置它。记录成功地添加了ID的自动递增值,但是当我返回输出参数时,ID没有返回。设置为0
有什么建议吗?
您已经定义了输出参数-但是您是否也在调用.ExecuteNonQuery()
后读取它 ??不幸的是,您没有显示该代码…
基本上,你需要
SqlCommand cmd = new SqlCommand(..., connection); .....
// set up your parameter as above
connection.Open();
cmd.ExecuteNonQuery();
var outputValue = cmd.Parameters["@APID"].Value; // you need to read it out!
connection.Close();
你在做这个吗??这就是你总是得到0的原因吗?
输出参数不是 .ExecuteNonQuery()
调用的返回值-需要在调用后显式读出参数值