ADO.NET中数据适配器的原子性

时间:2009-10-13 11:45:01

标签: ado.net transactions atomic dataadapter

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

让我们说:

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

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

1 个答案:

答案 0 :(得分:0)

我已经使用Reflector检查了SqlDataAdapter的实现,它看起来好像只是执行相关命令(InsertCommandUpdateCommandDeleteCommand)按顺序接连,而不对它们施加任何形式的交易。我怀疑Microsoft编写的所有其他类型的适配器都将以相同的方式工作。

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

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