我刚接触ADO.NET并学习它。我想知道在填充数据集和更新数据库时,ADO.NET中的数据适配器是否本身提供原子性或ACID属性,或者我们是否必须显式地使用事务来实现这一点。
让我们说:
我希望所有步骤(如果需要,可以排除第一步,因为它将是一个可以一次提取的脱机数据)都一次性完成,原子地说,我需要一个事务吗?如果不是,如何实现这一点?
我已经检查了 SqlDataAdapter 在我看来,它好像只是执行相关的命令( InsertCommand , UpdateCommand , DeleteCommand )一个接一个地按顺序进行,而不在它们周围施加任何类型的事务。我怀疑微软编写的所有其他类型的适配器都会以同样的方式工作。
SqlDataAdapter
InsertCommand
UpdateCommand
DeleteCommand
如果需要原子更新,您应该创建自己的事务,例如
using(var scope = new TransactionScope()) { adapter.Update(dataSet); scope.Complete(); }