在ASP中使用事務控制

來源:互聯網
上載者:User

   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使用指令碼語言,功能就一定弱。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.