使用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

有什么建议吗?

使用sqlCommand.ExecuteNonQuery()返回范围标识

您已经定义了输出参数-但是您是否也在调用.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()调用的返回值-需要在调用后显式读出参数值