откуда ADO.NET узнает, что произошло нарушение параллелизма SQL Server? - PullRequest
1 голос
/ 19 марта 2012

Я не понимаю, как 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?

...