0

我是 ADO.NET 的新手并正在学习它。我想知道 ADO.NET 中的数据适配器是否在填充数据集和更新数据库时自行提供原子性或 ACID 属性,或者我们是否必须显式使用事务来实现这一点。

比方说:

  • 我想通过数据适配器从数据库中获取数据到数据集
  • 向网站发送一些信息
  • 对数据集中的数据进行一些更改
  • 使用 DataAdapter.Update(DataSet) 更新数据库

我希望所有步骤(如果需要可以排除第一步,因为它将是一个可以一次性获取的离线数据)一次完成,原子地,我需要一个事务吗?如果不是如何实现这一点?

4

1 回答 1

0

我已经检查了SqlDataAdapterReflector 的实现,在我看来,它好像只是依次执行相关命令(InsertCommand, UpdateCommand, DeleteCommand),而没有在它们周围强加任何类型的事务。我怀疑微软编写的所有其他类型的适配器都会以同样的方式工作。

如果您想要原子更新,您应该创建自己的事务,例如

using(var scope = new TransactionScope()) {
    adapter.Update(dataSet);
    scope.Complete();
}
于 2009-10-13T12:01:58.107 回答