程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> 在ASP中使用事務控制

在ASP中使用事務控制

編輯:關於ASP編程

       julyclyde(原作)

      作者系2月份微軟社區之星Microsoft China Community Star

      在編程中,經常需要使用事務。所謂事務,就是一系列必須都成功的操作,只要有一步操作失敗,所有其他的步驟也必須撤銷。比如用ASP開發一個網絡硬盤系統,其用戶注冊部分要做的事有:

      將用戶信息記入數據庫

      為用戶開個文件夾用於存儲

      初始化用戶操作日志

      這三步必須使用事務,否則萬一磁盤操作失敗,而沒有撤銷數據庫操作,就會造成只能登陸而不能操作的“死用戶”現象。

      由於數據庫系統特殊的發展歷史,小至Access,大到DB2,無不帶有事務支持。因此上述步驟可以如下表示:

      On Error Resume Next

      第一步:

      在事務環境下把用戶信息記入數據庫

      If Err Then

      關閉連接

      退出

      Else

      第二步:創建文件夾

      If Err Then

      回滾第一步數據庫操作,退出

      Else

      第三步:在事務環境下操作日志數據庫

      If Err Then

      回滾第一步操作,刪除第二步建立的文件夾

      退出

      End If

      End If

      End If

      提交第一步數據庫操作的事務

      提交第二步數據庫操作的事務

      End

      每一步都需要進行判斷,如果失敗,還需要手工回滾前面多步操作,使程序變得復雜、難懂。如果今後更新了程序,增加其他步驟,還需要嵌套更多層的If...Else...End If,使程序流程更加復雜。

      正確的解決辦法是使用ASP的事務控制功能。IIS通過和MTS服務聯系,可以控制多種支持事務的系統,當程序發出“失敗”的信號時,所有支持事務的系統均將自動回滾,即使操作已經正式完成;對不支持事務的操作也提供了方便的手工回滾方式。上面的例子用ASP事務控制功能重寫如下:

      <%@ 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中進行控制即可,非常方便,程序員可以專注於過程編寫而不是書寫糾錯代碼。

      其實ASP還提供了許多更有用的功能,等著我們使用,千萬不要以為ASP使用腳本語言,功能就一定弱。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved