事务处理

适用于:Access 2013、Office 2013

ADO 提供下列用于控制事务的方法:BeginTransCommitTransRollbackTrans。 当您希望将对源数据进行的一系列更改作为一个整体来保存或取消时,可以将这些方法用于 Connection 对象。 例如,若要在帐户之间转账,那么可以从一个帐户中减去该笔金额,并在另一个帐户中增加相同的金额。 如果其中任意一个更新失败,那么这两个帐户之间将不再平衡。 若在打开的事务中进行这些更改,即可确保所有更改全部生效或全都无效。

注意

并非所有的提供程序都支持事务。 请确认提供程序定义的属性“Transaction DDL”出现在 Connection 对象的 Properties 集合中,这表示提供程序支持事务。 如果提供程序不支持事务,则调用其中的任一方法将返回错误。

调用 BeginTrans 方法之后,提供程序将不再即时提交所做的更改,直至调用 CommitTransRollbackTrans 结束事务。

调用 CommitTrans 方法可保存连接上打开的事务中所做的更改,并结束事务。 调用 RollbackTrans 方法将撤消在打开的事务中所做的任何更改并结束该事务。 在没有打开的事务时调用任一方法都会生成错误。

根据 Connection 对象的 Attributes 属性,调用 CommitTransRollbackTrans 方法可能会自动启动新事务。 如果 Attributes 属性设置为 adXactCommitRetaining,提供程序会自动在 CommitTrans 调用之后启动新事务。 如果 Attributes 属性设置为 adXactAbortRetaining ,那么提供程序会在 RollbackTrans 调用之后自动启动一个新的事务。

事务隔离级别

使用 IsolationLevel 属性可以设置 Connection 对象上事务的隔离级别。 直到下次调用 BeginTrans 方法时,该设置才会生效。 如果请求的隔离级别不可用,则提供程序将返回下一个更高的隔离级别。 有关有效值的更多详细信息,请参阅 ADO 程序员参考中的 IsolationLevel 属性。

嵌套事务

对于支持嵌套事务的提供程序,在打开的事务中调用 BeginTrans 方法会启动新的嵌套事务。 返回值指示嵌套级别:返回值“1”表示已打开顶级事务 (即事务未嵌套在另一个事务) ,“2”指示已打开第二级事务 (嵌套在顶级事务) 中的事务,依此类推。 调用 CommitTransRollbackTrans 仅影响最近打开的事务;必须先关闭或回滚当前事务,然后才能解析任何更高级别的事务。