Атомарность адаптера данных в ADO.NET - PullRequest
0 голосов
/ 13 октября 2009

Я новичок в ADO.NET и изучаю его. Мне было интересно, если адаптер данных в ADO.NET сам по себе обеспечивает атомарность или свойства ACID при заполнении набора данных и обновлении базы данных, или нам нужно явно использовать транзакцию для достижения этой цели.

Допустим,

  • Я хочу получить данные из базы данных через адаптер данных в набор данных
  • Отправить некоторую информацию на сайт
  • Внести некоторые изменения в данные в наборе данных
  • Обновление базы данных с использованием DataAdapter.Update (DataSet)

Я хочу, чтобы все этапы (при необходимости можно исключить первый шаг, поскольку это будут автономные данные, которые можно получить за один раз) выполняются за один раз, атомарно, понадобится ли транзакция? Если нет, как этого добиться?

1 Ответ

0 голосов
/ 13 октября 2009

Я проверил реализацию SqlDataAdapter с помощью Reflector, и мне кажется, что он просто последовательно выполняет соответствующие команды (InsertCommand, UpdateCommand, DeleteCommand) без наложения какого-либо вида сделки вокруг них. Я подозреваю, что все другие типы адаптеров, написанные Microsoft, будут работать так же.

Если вы хотите атомарные обновления, вы должны создать свою собственную транзакцию, например,

using(var scope = new TransactionScope()) {
    adapter.Update(dataSet);
    scope.Complete();
}
...