Где в пространстве имен .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 в своей полезности сообщают об этом сценарии как о нарушении параллелизма.
Спасибо
SqlDataAdapter
? Как ты это называешь? Чего вы хотите добиться, найдя этот исходный код, обойти ошибку нарушения параллелизма? - person Jordão   schedule 09.04.2012