【发布时间】:2017-04-24 18:56:33
【问题描述】:
考虑这个简单的 SP:
create proc Updater
@id int,
@name varchar(25),
@rowversion timestamp
as
begin
update FOO
set name=@name
where id = @id and rowversion = @rowversion;
if @@rowcount > 0
select @rowversion = rowversion
from FOO where id = @id;
end
如果其他人在客户端应用程序读入该行后对其进行了编辑,则此更新将(故意)失败,因为客户端应用程序使用的时间戳已过时。
ADO.NET 专家的问题:是否必须在 SP 中声明 @rowversion 参数 OUTPUT 才能通过 dataAdapter 的 UpdateCommand 返回最新的时间戳?或者,如果 ADO.NET 方向设置为ParameterDirection.InputOutput,那么 IN 的默认服务器端参数方向是否会返回一个值?
请参阅RowUpdating 事件的此文档:
“如果有输出参数,则放在DataRow中。”
这个 ADO.NET 文档的“输出参数”究竟是什么意思?它是在谈论 ADO.NET 参数定义,还是服务器端定义,或两者兼而有之?
我不想依赖我的反复试验结果,因为我看到的行为可能是我尚未确定的一些复杂因素的结果。
【问题讨论】:
-
SP返回 0 或 1 -
我不明白你的评论,萨米。它似乎与我询问的关于 parameter 方向性的具体问题无关。我不是在问返回值。
-
@Sami 一个存储过程的返回值是一个整数,而不是一个非空位。
标签: sql-server parameters ado.net sqlcommand