Как происходит синхронизация набора данных? - PullRequest
1 голос
/ 08 июня 2011

Этот вопрос был задан в одном из интервью, которые я недавно посещал. Предположим, у нас есть набор данных. Мы знаем, что он (набор данных) работает в автономном режиме. Теперь мы собрали необходимые данные из базы данных в набор данных с помощью адаптера данных и заполнили пользовательский интерфейс. Предположим, один пользователь (скажем, user1) вносит некоторое обновление в пользовательский интерфейс, который позже будет сохранен в базе данных через набор данных, а другой пользователь (скажем, пользователь 2) уже изменил данные в базе данных.

Тогда возникает вопрос: как набор данных узнает, в какой момент данные были изменены? как происходит синхронизация в наборе данных?

Другими словами, пользователь1 не знает, что пользователь2 изменил некоторую запись в базе данных. Но каким-то образом набор данных должен быть обновлен примерно так же. Как это может произойти?

Спасибо

1 Ответ

0 голосов
/ 08 июня 2011

Один из способов обойти проблемы оптимистичного параллелизма в ADO заблокировать записи, которые ваш DataSet получает, как только операция редактирования начинается. Эта стратегия известна как пессимистическая блокировка. Длительные блокировки обычно приводят к низкая производительность базы данных и проблемы с конкуренцией, но в ситуации, когда приложение не может терпеть записи изменяются во время их обновления, пессимистично может потребоваться блокировка.

С ADO относительно легко использовать пессимистическую блокировку схема. В ADO.NET это несколько сложнее настроить, но вы все еще можете использовать пессимистическую блокировку в вашем Приложения. Тем не менее, только потому, что вы можете сделать что-то не означает, что вы должны делать это все время - о чем я объяснение следует использовать только в случае крайней необходимости.

Основные шаги для пессимистической блокировки следующие:

  1) Create a transaction with an IsolationLevel of RepeatableRead.

  2) Set the DataAdapter’s SelectCommand property to use the transaction you created.

  3) Make the changes to the data.

  4) Set DataAdapter’s Insert, Update, and Delete command properties to use the transaction you created.

  5) Call the DataAdapter’s Update method.

  6) Commit the transaction.
...