ASP的事務控制功能。IIS通過和MTS服務聯絡,可以控制多種支援事務的系統,當程式發出“失敗”的訊號時,所有支援事務的系統均將自動復原,即使操作已經正式完成;對不支援事務的操作也提供了方便的手工復原方式:
<%@ TRANSACTION = Required %>
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open ....
Conn.Execute "INSERT...."
Conn.Close
Set Conn=Nothing
Set Conn2=Server.CreateObject("ADODB.Connection")
Conn2.Open ....
Conn2.Execute "INSERT...."
Conn2.Close
Set Conn2=Nothing
Set FSO=Server.CreateObject("Scripting.FilesystemObject")
FSO.CreateFolder "...."
If Err Then
ObjectContext.SetAbort '通知所有支援事務的組件復原,並運行手工復原代碼
Else
ObjectContext.SetComplete
End If
Set FSO=Nothing
Sub OnTransactionAbort
Response.Write "錯誤"
FSO.DeleteFile Server.Mappath("a.txt") 'FSO的手工復原——刪除檔案夾
End Sub
Sub OnTransactionCommit
Response.Write "勝利完成任務"
End Sub
%>
第一行的<%@ TRANSACTION = Required %>表示這一頁ASP檔案需要MTS的事務支援。中間的各個操作都按普通順序書寫,而不用考慮復原問題。在程式最後判斷是否有錯誤。如果有,調用ObjectContext的SetAbort方法,IIS會通過MTS服務通知所有支援事務的組件復原(主要是資料庫),並且運行Sub OnTransactionAbort對不支援事務的操作手工復原;如果沒有發生錯誤,調用ObjectContext的SetComplete方法,則會運行Sub OnTransactionCommit來顯示成功的訊息。
整個ASP程式不需要為判斷錯誤和復原操作書寫多餘的代碼,只須在最後進行判斷,即使今後增加了多步操作,也只需要在Sub OnTransactionAbort中進行控制即可,非常方便,程式員可以專註於過程編寫而不是書寫錯誤修正代碼。