Я не понимаю, как ADO.NET распознает нарушение параллелизма, если он не выполняет что-то помимо того, что я ему говорю, внутри своего «черного ящика».
Мой запрос на обновление в SQL Server 2000делает что-то вроде следующего примера, который упрощен;если версия строки, переданная в хранимый процесс клиентом, не совпадает с версией строки в базе данных, предложение where не будет выполнено и строки не будут обновлены:
create proc UpdateFoo
@rowversion timestamp OUTPUT,
@id int,
@foodescription varchar(255)
as UPDATE FOO set description = @foodescription
where id = @id and rowversion = @rowversion;
if @@ROWCOUNT = 1
select @rowversion from foo where id = @id;
Я создаю объект SqlCommand изаполните параметры и назначьте объект команды свойству UpdateCommand SqlDataAdapter.Затем я вызываю метод Update адаптера данных.
Действительно, должна быть ошибка параллелизма, потому что я намеренно изменяю строку базы данных, чтобы вызвать новую версию строки.Но откуда ADO.NET узнает об этом?Это делает что-то большее, чем выполнение команды?
В событии RowUpdated SqlDataAdapter будет ошибка параллелизма:
MySqlDataAdapter += (sender, evt) =>
{
if ((evt.Status == UpdateStatus.Continue) && (evt.StatementType == StatementType.Update))
{
// update succeeded
}
else
{
// update failed, check evt.Errors
}
}
Сравнивает ли ADO.NET версии строк?Это смотрит на @@ rowcount?