【发布时间】:2011-12-13 17:03:09
【问题描述】:
我有一个看起来像这样的存储过程。
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 中返回 0,尽管我声明了一个 out 参数并在存储过程退出之前对其进行了设置。记录已成功添加 ID 的自动递增值,但当我返回输出参数时,未返回 ID。它设置为 0。
有什么建议吗?
【问题讨论】:
-
您可以简单地将值作为标量而不是输出参数返回吗?更容易处理,恕我直言。
-
您的代码似乎不正确。您的参数名称定义为 iD(小写 I),SET 语句使用 ID(大写 I),而您获取输出参数值的代码使用完全不同的 APID。您能否发布您正在使用的实际代码?
-
我在记事本++中修改了我的代码。实际值是正确的。我只是想让它尽可能通用。这不是错误的原因。从那以后我发现了问题所在。
标签: c# asp.net return-value executenonquery