Выполнение обновлений в базе данных

г изображен простой пример того

Фундаментальной проблемой, которой почти всегда приходится уделять внимание при выполнении обновлений в базе данных, является вопрос, как обрабатывать параллельные обновления одних и тех же данных. На рис. Г.4 изображен простой пример того, каким образом конкурентные обновления могут приводить к неприятностям. На рис. Г.4 клиент 1 извлекает из таблицы строку. Затем появляется клиент 2 и извлекает ту же самую строку. Клиент 2 обрабатывает строку несколько быстрее и фиксирует ее обновления в базе данных раньше клиента 1. Вопрос, который приходится решать при конкуренции, следующий: что должно происходить, когда клиент 1, в свою очередь, попытается записать свои изменения той же самой строки? Можно было бы допустить стратегию «последнего слова» и всегда записывать значения обновления в строку, не рассматривая ее текущего содержания. По существу это отсутствие контроля конкуренции. Если бы вы поступили так в сценарии на рис. Г.4, изменения, сделанные клиентом 2, были потеряны. Если вы работаете с моделью подключенных данных, то существует ряд способов разрешения такой ситуации при помощи замков на таблицах или строках на стороне сервера, которые предотвращают параллельный доступ или обновления в зависимости от уровня изоляции, который вы хотите обеспечить. Это очень сложная сама по себе тема, не имеющая на самом деле отношения к модели отключенных данных, используемой в ADO. NET. Чтобы справиться с конкурентным нарушением, вы прежде всего должны обнаружить, что оно произошло. В ADO. NET это делается путем сравнения текущего содержимого столбцов в базе данных с тем, что было первоначально из нее извлечено. Если текущее содержимое строки в базе данных отлично от того, что кэшировал код клиента ADO. NET, то предпосылка оптимистической конкуренции нарушена и с этим надо что-то делать. Как уже говорилось, набор данных сохраняет исходные значения для любой строки, подвергающейся модификации. Это делает очень простым сравнение значений и принятие решений в отношении оптимистической конкуренции, как только конфликт обнаружен.