BeginTrans,CommitTrans 与RollbackTrans

下面的“事务方法”管理在会话处理中的事务,会话由 object 所在处表示:

  • BeginTrans 开始一个新的事务。
  • CommitTrans 结束当前事务并保存所作的修改。
  • RollbackTrans 结束当前事务并将在 rdoEnvironment 对象中的数据库还原到该当前事务开始时的状态。

可以对 rdoConnection 对象使用事务方法-但是在这种情况下,事务的范围只限于在 rdoConnection 下建立的 rdoResultsetrdoQuery 对象中。

语法

object.BeginTrans | CommitTrans | RollbackTrans

object 所在处代表一个对象表达式,其值为“应用于”列表中的一个对象。

说明

当要将在会话中对数据库所作的一系列改变作为一个逻辑单元时,可以对 rdoEnvironmentrdoConnection 对象使用事务方法。也就是,一个操作集合既以一个集合为单位完成,也以一个集合为单位回滚。这样,如果集合的任何操作失败,则整个事务也失败。事务还允许对数据库作临时改变- 该改变可用 RollbackTrans 方法取消。

一般,ODBC 驱动程序以下列两种模式中的一种工作:

  • 自动提交模式:当没有显式地使用 BeginTrans 方法启动一个事务,每一个被执行的操作在完成时都立即提交给数据库。
  • 手工提交模式:当显式地使用 BeginTrans 方法启动一个事务时,或使用 ODBC SQLSetStmtOption 函数禁止 SQL_AUTO_COMMIT 模式时,或发送一个 SQL 语句启动一个事务 (BEGIN TRANS) 时,所有操作都是事务中的一部分,并且不作修改地提交给数据库,直到使用 CommitTrans 方法为止。如果执行 CommitTrans,或使用 RollbackTrans 方法之前连接失败,就取消这个操作-回滚。

注意 当使用远程服务器时,如果该服务器象 Microsoft SQL Server 那样支持分布式的事务协调程序 (DTC),就可以初始化和控制跨越多个服务器的事务。也就是,如果在调用一个远程过程的远程服务器上调用一个过程,则 DTC 可以保证该操作被包括在初始化的事务中。详细信息,

一般来说,当必须更新两个或多个表中的行,并确保在所有的表中所作的改变或者都被完成(提交)、或者一点也不变(回滚)时,使用事务维护数据的完整性。例如,当将钱从一个帐户转到另一个帐户时,需要从一个帐户上减去一个数并将其加到另一个帐户上。如果其中有一个修改失败,帐户就不会平衡。在修改第一行之前,先使用 BeginTrans 方法,然后,只要再有修改失败,就可以使用 RollbackTrans 方法撤消所有的修改。在成功地修改了最后一行之后,就使用 CommitTrans 方法。

注意 在一个 rdoEnvironment 对象内,对于该 rdoEnvironment,事务总是全局的,并不只限于一个数据库,或一个结果集。如果在一个 rdoEnvironment 事务内、在多个数据库或结果集上完成操作,则 RollbackTrans 方法还原所有的在那些数据库和结果集上的操作。

一旦使用 CommitTrans,就不能取消在该事务中所作的改变,不过若该事务嵌套在另一个要回滚的事务中除外。除非使用动作查询直接执行 SQL 事务管理语句,否则事务不能嵌套。如果想模拟覆盖的、无嵌套的范围的事务,可以建立另外的 rdoEnvironment 对象包含并发的事务。

注意 可以使用包含事务语句的 SQL 动作查询。例如,对于 Microsoft SQL Server,可以使用 SQL 语句,如,BEGIN TRANSACTION, COMMIT TRANSACTION 或 ROLLBACK TRANSACTION。这个技术支持 ODBC 驱动程序所不支持的嵌套事务。

如果不保存或者要回滚任何挂起的事务,就关闭 rdoEnvironment 对象,则事务会自动回滚。

如果不先使用 BeginTrans 方法就使用了 CommitTransRollbackTrans 方法,那么不会产生错误。

有些数据库不支持事务,在这些情况下,rdoConnection 对象或 rdoResultset 对象的 Transactions 属性为 False。为了保证数据库能支持事务,在使用 BeginTrans 方法之前,先检查 rdoConnection 对象的 Transactions 属性的值。如果对多个数据库使用 rdoResultset 对象,则先检查该 rdoResultset 对象的 Transactions 属性。如果 rdoConnection rdoResultset 不支持事务,则这些方法将被忽略并且不产生错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值