国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-18 20:00:53
字體:
供稿:網(wǎng)友

julyclyde(原作)

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

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

  1. 將用戶信息記入數(shù)據(jù)庫
  2. 為用戶開個文件夾用于存儲
  3. 初始化用戶操作日志


這三步必須使用事務(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


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

    正確的解決辦法是使用ASP的事務(wù)控制功能。IIS通過和MTS服務(wù)聯(lián)系,可以控制多種支持事務(wù)的系統(tǒng),當(dā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("Scr

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐山县| 锦州市| 乳源| 永春县| 星座| 沙湾县| 明溪县| 汽车| 敦化市| 康马县| 诸城市| 丰城市| 盐边县| 天镇县| 漠河县| 东港市| 南宫市| 清镇市| 南丰县| 肥乡县| 济源市| 富川| 南乐县| 壶关县| 乾安县| 筠连县| 张北县| 乌鲁木齐县| 台前县| 霍林郭勒市| 昌宁县| 临洮县| 三原县| 北流市| 通城县| 凉城县| 苍溪县| 无棣县| 丘北县| 邢台县| 正蓝旗|