事务处理

事务 界定跨连接执行的一系列数据访问操作的开始和结束。 根据数据源的事务功能,Connection 对象还允许你创建和管理事务。 例如,使用 Microsoft OLE DB Provider for SQL Server 访问 Microsoft SQL Server 上的数据库,可以为执行的命令创建多个嵌套事务。

ADO 可确保对事务中操作生成的数据源的更改完全一起成功发生,或者根本不发生。

如果取消事务,或者其中一个操作失败,结果就好像事务中没有发生任何操作一样。 在事务开始之前,数据源将保持原样。

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 仅影响最近打开的事务;必须先关闭或回滚当前事务,然后才能解析任何更高级别的事务。