5

.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 库在他们的帮助下,将这种情况报告为并发冲突。

谢谢

4

2 回答 2

2

不要使用反编译器,而是查看真实代码。有关详细信息,请参阅以下博客文章。 http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

于 2012-04-05T06:10:46.590 回答
0

我在 System.Data.Common.DbDataAdapter.cs 中找到了相关代码——当受影响的记录数为零时,会引发并发冲突。

于 2012-04-10T18:39:46.757 回答