在ASP中使用事務(wù)控制
來源:易賢網(wǎng) 閱讀:774 次 日期:2015-01-09 11:35:04
溫馨提示:易賢網(wǎng)小編為您整理了“在ASP中使用事務(wù)控制”,方便廣大網(wǎng)友查閱!

julyclyde(原作)

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

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

將用戶信息記入數(shù)據(jù)庫

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

初始化用戶操作日志

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

由于數(shù)據(jù)庫系統(tǒng)特殊的發(fā)展歷史,小至Access,大到DB2,無不帶有事務(wù)支持。因此上述步驟可以如下表示:

On Error Resume Next

第一步:

在事務(wù)環(huán)境下把用戶信息記入數(shù)據(jù)庫

If Err Then

關(guān)閉連接

退出

Else

第二步:創(chuàng)建文件夾

If Err Then

回滾第一步數(shù)據(jù)庫操作,退出

Else

第三步:在事務(wù)環(huán)境下操作日志數(shù)據(jù)庫

If Err Then

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

退出

End If

End If

End If

提交第一步數(shù)據(jù)庫操作的事務(wù)

提交第二步數(shù)據(jù)庫操作的事務(wù)

End

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

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

<%@ 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 '通知所有支持事務(wù)的組件回滾,并運行手工回滾代碼

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 "勝利完成任務(wù)"

End Sub

%>

第一行的<%@ TRANSACTION = Required %>表示這一頁asp文件需要MTS的事務(wù)支持。中間的各個操作都按普通順序書寫,而不用考慮回滾問題。在程序最后判斷是否有錯誤。如果有,調(diào)用ObjectContext的SetAbort方法,IIS會通過MTS服務(wù)通知所有支持事務(wù)的組件回滾(主要是數(shù)據(jù)庫),并且運行Sub OnTransactionAbort對不支持事務(wù)的操作手工回滾;如果沒有發(fā)生錯誤,調(diào)用ObjectContext的SetComplete方法,則會運行Sub OnTransactionCommit來顯示成功的消息。

整個ASP程序不需要為判斷錯誤和回滾操作書寫多余的代碼,只須在最后進行判斷,即使今后增加了多步操作,也只需要在Sub OnTransactionAbort中進行控制即可,非常方便,程序員可以專注于過程編寫而不是書寫糾錯代碼。

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

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機網(wǎng)站地址:在ASP中使用事務(wù)控制

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)