我是ADO.NET的新手并且正在学习它。我想知道ADO.NET中的数据适配器在填充数据集和更新数据库时是否自己提供原子性或ACID属性,或者我们是否必须明确地使用事务来实现这一点。
让我们说:
我想要所有步骤(如果需要可以排除第一步,因为它将是可以一次获取的离线数据)一次性完成,原子地,我需要一个事务吗?如果不是如何实现这个?
答案 0 :(得分:0)
我已经使用Reflector检查了SqlDataAdapter
的实现,它看起来好像只是执行相关命令(InsertCommand
,UpdateCommand
,DeleteCommand
)按顺序接连,而不对它们施加任何形式的交易。我怀疑Microsoft编写的所有其他类型的适配器都将以相同的方式工作。
如果您想要原子更新,您应该创建自己的交易,例如
using(var scope = new TransactionScope()) {
adapter.Update(dataSet);
scope.Complete();
}