我有一个看起来像这样的存储过程。
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);
但是我一直从存储的 porcuedure evne 返回 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()
调用的返回值 - 您需要在调用后明确读出参数值。
关于c# - 使用 sqlCommand.ExecuteNonQuery() 返回范围标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493127/