1

我有一个看起来像这样的存储过程。

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

但是尽管我声明了一个 out 参数并在存储过程退出之前对其进行了设置,但我仍然从存储的 porcuedure 中返回 0。记录成功添加了 ID 的自动递增值,但是当我返回输出参数时,没有返回 ID。它设置为 0。

有什么建议么?

4

1 回答 1

4

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

于 2011-12-13T17:06:52.363 回答