亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        在ASP中使用事務(wù)控制

        字號(hào):


            julyclyde(原作)
            作者系2月份微軟社區(qū)之星Microsoft China Community Star
            在編程中,經(jīng)常需要使用事務(wù)。所謂事務(wù),就是一系列必須都成功的操作,只要有一步操作失敗,所有其他的步驟也必須撤銷。比如用ASP開(kāi)發(fā)一個(gè)網(wǎng)絡(luò)硬盤系統(tǒng),其用戶注冊(cè)部分要做的事有:
            將用戶信息記入數(shù)據(jù)庫(kù)
            為用戶開(kāi)個(gè)文件夾用于存儲(chǔ)
            初始化用戶操作日志
            這三步必須使用事務(wù),否則萬(wàn)一磁盤操作失敗,而沒(méi)有撤銷數(shù)據(jù)庫(kù)操作,就會(huì)造成只能登陸而不能操作的“死用戶”現(xiàn)象。
            由于數(shù)據(jù)庫(kù)系統(tǒng)特殊的發(fā)展歷史,小至Access,大到DB2,無(wú)不帶有事務(wù)支持。因此上述步驟可以如下表示:
            On Error Resume Next
            第一步:
            在事務(wù)環(huán)境下把用戶信息記入數(shù)據(jù)庫(kù)
            If Err Then
            關(guān)閉連接
            退出
            Else
            第二步:創(chuàng)建文件夾
            If Err Then
            回滾第一步數(shù)據(jù)庫(kù)操作,退出
            Else
            第三步:在事務(wù)環(huán)境下操作日志數(shù)據(jù)庫(kù)
            If Err Then
            回滾第一步操作,刪除第二步建立的文件夾
            退出
            End If
            End If
            End If
            提交第一步數(shù)據(jù)庫(kù)操作的事務(wù)
            提交第二步數(shù)據(jù)庫(kù)操作的事務(wù)
            End
            每一步都需要進(jìn)行判斷,如果失敗,還需要手工回滾前面多步操作,使程序變得復(fù)雜、難懂。如果今后更新了程序,增加其他步驟,還需要嵌套更多層的If...Else...End If,使程序流程更加復(fù)雜。
            正確的解決辦法是使用ASP的事務(wù)控制功能。IIS通過(guò)和MTS服務(wù)聯(lián)系,可以控制多種支持事務(wù)的系統(tǒng),當(dāng)程序發(fā)出“失敗”的信號(hào)時(shí),所有支持事務(wù)的系統(tǒng)均將自動(dòng)回滾,即使操作已經(jīng)正式完成;對(duì)不支持事務(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ù)的組件回滾,并運(yùn)行手工回滾代碼
            Else
            ObjectContext.SetComplete
            End If
            Set FSO=Nothing
            Sub OnTransactionAbort
            Response.Write "錯(cuò)誤"
            FSO.DeleteFile Server.Mappath("a.txt") 'FSO的手工回滾——?jiǎng)h除文件夾
            End Sub
            Sub OnTransactionCommit
            Response.Write "勝利完成任務(wù)"
            End Sub
            %>
            第一行的<%@ TRANSACTION = Required %>表示這一頁(yè)asp文件需要MTS的事務(wù)支持。中間的各個(gè)操作都按普通順序書寫,而不用考慮回滾問(wèn)題。在程序最后判斷是否有錯(cuò)誤。如果有,調(diào)用ObjectContext的SetAbort方法,IIS會(huì)通過(guò)MTS服務(wù)通知所有支持事務(wù)的組件回滾(主要是數(shù)據(jù)庫(kù)),并且運(yùn)行Sub OnTransactionAbort對(duì)不支持事務(wù)的操作手工回滾;如果沒(méi)有發(fā)生錯(cuò)誤,調(diào)用ObjectContext的SetComplete方法,則會(huì)運(yùn)行Sub OnTransactionCommit來(lái)顯示成功的消息。
            整個(gè)ASP程序不需要為判斷錯(cuò)誤和回滾操作書寫多余的代碼,只須在最后進(jìn)行判斷,即使今后增加了多步操作,也只需要在Sub OnTransactionAbort中進(jìn)行控制即可,非常方便,程序員可以專注于過(guò)程編寫而不是書寫糾錯(cuò)代碼。
            其實(shí)ASP還提供了許多更有用的功能,等著我們使用,千萬(wàn)不要以為ASP使用腳本語(yǔ)言,功能就一定弱。