.NET System.Data 命名空间中的代码在执行更新命令时确定 SQL Server 2K 表中的行在客户端程序读入后是否已更改,即客户端行的版本是“陈旧的”?
我想使用反编译器查看代码并弄清楚它如何确定发生了并发冲突。我知道它与表中的时间戳列和/或@@rowcount 有关,但我想看看当库执行包含在存储过程中的更新命令时发生了什么。
存储过程将具有以下结构:
create proc foo_update
@id int,
@rowversion timestamp,
@val varchar(5)
as
begin
update foo set a = @val
where id = @id and mytimestampcolumn = @rowversion;
end
也就是说,如果由于 where 子句将客户端 System.Data.DataRow 中的 rowversion 与数据库中行的时间戳值进行比较,则不会更新任何行,并且 proc 将成功运行并且不会产生错误。然而,SqlClient 库在他们的帮助下,将这种情况报告为并发冲突。
谢谢