ObjectContext 是个全局对象,直接使用,把它用在事务里,有时也有些用。
<%@ transaction=required %>
<%option explicit%>
<%
on error resume next
dim conn
set conn = Server.CreateObject("ADODB.Connection")
'conn.open "Provider=Microsoft.jet.oledb.4.0;data source=" & Server.MapPath("Trans.mdb") '事务时不能使用此驱动
conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ= " & Server.MapPath("Trans.mdb")
Sub OnTransactionCommit
Response.Write("ok.")
End Sub
Sub OnTransactionAbort
Response.Write("error:" & err.Description)
End Sub
conn.BeginTrans
conn.Execute "update tbl set fld=fld+2 where ID=1"
conn.Execute "update tbl set fld=fld+1 where ID=2"
if err.number = 0 then
conn.CommitTrans
conn.close()
set conn = nothing
ObjectContext.SetComplete
else
conn.RollbackTrans
conn.close()
set conn = nothing
ObjectContext.SetAbort
end if
%>
- 调用 SetAbort 时,OnTransactionAbort 事件(处理程序)将被触发,按代码中将显示“error:”加错误信息。
- 调用 SetComplete 时,OnTransactionCommit 事件(处理程序)将被触发,按代码中将显示“ok.”。
有人可能搞不懂,为什么搞这么复杂,把 Response.Write 直接写在 set conn = nothing 这句之后不就完了么?在这里效果的确是一样的,但在一些较大型的程序中,ObjectContext 还是有意义的。
要点
- sub OnTransactionCommit
- sub OnTransactionAbort
- ObjectContext.SetComplete
- ObjectContext.SetAbort