例如,假设某个时间有人在你的站点上买了东西,有关的交易信息存储在两个表中 。一个表用来保存买者的信用卡信息,另一个表包含了要买的商品的信息。
现在,假如有一个人正试图从你的站点上买东西。他的信用卡号码已经输入了第一个表中。但是,就在这时,发生了意外情况,一道闪电击中了你的服务器,使第二个表没有被更新。在这种情况下,当然最后是两个表都没有被更新过。你当然不想收这个人的钱去买他不想买的东西。使用事务处理,你可以防止第二个表没有被更新而第一个表被更新的情况出现:
<%
Set MyConn=Sever.CreateObject("ADODB.Connection")
MyConn.Open "FILEDSN=d:Program Files
Common FilesODBCData SourcesMyData.dsn"
MyConn.BeginTrans
MyConn.Execute "INSERT CreditCard (CCNum) VALUES ('5555-55-444-44-4444')"
MyConn.Execute "INSERT Shipping (Address) VALUES('Paris,France')"
MyConn.CommitTrans
MyConn.Close
%>
在这个例子中,用BeginTrans方法和CommitTrans方法来标记事务处理的开始和结束。在BeginTrans方法被调用之后,CommitTRans方法被调用之前,不管出现什么错误,两个表都不会被更新。
你也可以恢复一个事务处理的操作(操作作废)。要做到这一点,应使用RollBackTrans方法。考虑如下的脚本:
<%
Set MyConn=Sever.CreateObject("ADODB.Connection")
MyConn.Open "FILEDSN=d:Program Files
Common FilesODBCData SourcesMyData.dsn"
MyConn.BeginTrans
MyConn.Execute "INSERT CreditCard (CCNum) VALUES ('5555-55-444-44-4444')"
MyConn.Execute "INSERT Shipping (Address) VALUES('Paris,France')"
IF WEEKDAYNAME(WEEKDAY(DATE))="Sunday" THEN
MyConn.RollBackTrans
ELSE
MyConn.CommitTrans
END IF
MyConn.Close
%>
在这个例子中,使用了RollBackTrans方法,如果是星期天,就取消事务处理所做的操作。在星期天两个表都不能被更新。