.NET System.Data декомпиляция пространства имен: где я могу найти код, относящийся к нарушениям параллелизма SQL Server - PullRequest
5 голосов
/ 30 марта 2012

Где в пространстве имен .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 со значением метки времени строки в базе данных, и процесс будет запустить успешно и не генерировать ошибку. Тем не менее, библиотеки SqlClient в своей полезности сообщают об этом сценарии как о нарушении параллелизма.

Спасибо

Ответы [ 2 ]

2 голосов
/ 05 апреля 2012

Вместо того, чтобы использовать декомпилятор, посмотрите на реальный код.см. следующий пост в блоге для деталей.http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

0 голосов
/ 10 апреля 2012

Я нашел соответствующий код в System.Data.Common.DbDataAdapter.cs - нарушение параллелизма возникает, когда число затронутых записей равно нулю.

...