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

Где в пространстве имен .NET System.Data находится код, определяющий при выполнении команды update, была ли изменена строка в таблице 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 в своей полезности сообщают об этом сценарии как о нарушении параллелизма.

Спасибо


person Tim    schedule 30.03.2012    source источник
comment
Вы используете SqlDataAdapter? Как ты это называешь? Чего вы хотите добиться, найдя этот исходный код, обойти ошибку нарушения параллелизма?   -  person Jordão    schedule 09.04.2012
comment
@Jordão: я хотел посмотреть, какие условия были необходимы для возникновения ошибки, то есть сравнивала ли библиотека значения временных меток или просто смотрела на количество затронутых записей.   -  person Tim    schedule 10.04.2012


Ответы (2)


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

person Atilla Ozgur    schedule 05.04.2012
comment
@ Аттила Озгур: Спасибо за помощь. Наличие фактического исходного кода для поиска привело меня в конце концов к ответу. Я вижу, что веб-сайт SO автоматически присудил вам 50% вознаграждения. - person Tim; 16.04.2012

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

person Tim    schedule 10.04.2012