.NET System.Data名称空间反编译:在哪里可以找到与SQL Server并发冲突有关的代码

Tim*_*Tim 5 decompiler system.data

.NET System.Data命名空间中的位置是在执行update-command时确定SQL Server 2K表中的行是否已在客户端程序读入后更改的代码,即客户端行的版本是"陈旧"?

我想使用反编译器查看代码并弄清楚它是如何确定发生并发冲突的.我知道它将与表中的timestamp列和/或@@ 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
Run Code Online (Sandbox Code Playgroud)

也就是说,如果因为where子句将客户端System.Data.DataRow中的rowversion与数据库中行的timestamp值进行比较而且因为proc成功运行而没有更改行,则不会更新行.不会产生错误.然而,SqlClient库在它们的帮助下,将此场景报告为并发冲突.

谢谢

Tim*_*Tim 0

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