NetBox 2.7 使用手册 |
在商务应用中,经常需要访问数据库,以完成对数据的查询、插入、更新、删除等操作。受应用逻辑的影响,有时需要将多条数据库操作指令组成一个工作单元(事务)。在数据库中,所谓事务是指一组逻辑操作单元,它使数据从一种状态变换到另一种状态。为确保数据库中数据的一致性,应当用离散的成组的逻辑单元操作数据:当它全部完成时,数据的一致性可以保持;而当单元中的一部分操作失败时,整个事务会被全部忽略,所有从起始点以后的操作全部退回到开始状态。
在 NetBox 在 Windows 2000 以后的操作系统中支持基于 MTS 的事务处理,然而出于移植性、应用程序性能(MTS 是一个缓慢的操作)与应用复杂程度的考虑,你可以使用 ADO 数据库的事务处理结合 NetBox 特有的脚本事件建立完美的事务处理框架。
ADO 的 Connection 对象提供三个方法用以进行事务处理:
BeginTrans:启动一个事务
CommitTrans:完成/提交一个事务
RollBackTrans:撤消/放弃一个事务
下面的代码创建一个连接并启动事务处理:
Set Conn = CreateObject("ADODB.Connection") Conn.Open ...... Conn.BeginTrans ...... Conn.CommitTrans
使用这种方式必须保证在结束脚本之前调用 CommitTrans 方法,比如调用 Shell.Quit、Response.End 提前结束脚本。
NetBox 的脚本支持 OnScriptEnd 事件,当脚本正常结束时,将自动触发,所以我们可以在这个事件中进行事务提交。实现代码如下:
Set Conn = CreateObject("ADODB.Connection") Conn.Open ...... Conn.BeginTrans ...... Sub OnScriptEnd Conn.CommitTrans End Sub
在上面的代码中,程序结束时的事务提交被转移到了 OnScriptEnd 事件中,这样,无论脚本从什么位置正常退出脚本运行,都将提交整个事务。
在事务处理中,可能会出于一些原因需要中止事务。为了中止事务,可以使用 err.Raise 报告错误,从而使脚本非正常结束。
Set Conn = CreateObject("ADODB.Connection") Conn.Open ...... Conn.BeginTrans ...... err.Raise errCode, errSource, errDescription Sub OnScriptEnd Conn.CommitTrans End Sub
与此类似,当脚本在事务处理过程中发生任何未被捕捉的错误时,同样也会导致脚本非正常结束。
在程序抛出错误,或者运行时间出错时,脚本程序将非正常结束,为了在脚本出错时撤消事务和进行其他错误处理,可以使用 OnScriptError 事件。
Set Conn = CreateObject("ADODB.Connection") Conn.Open ...... Conn.BeginTrans ...... err.Raise errCode, errSource, errDescription Sub OnScriptEnd Conn.CommitTrans End Sub Sub OnScriptError Conn.RollBackTrans ...... End Sub
本文给出的事务处理的方案适用于简单任务的事务处理,如果程序结构比较复杂,需要实现较复杂的或者多个事务处理,则需要根据需求自行进行事务的启动、提交和撤消。