<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大大毛 的筆記

      DDM's Note

    哪怕沒有辦法一定有說法,
    就算沒有鴿子一定有烏鴉,
    固執無罪 夢想有價,
    讓他們驚訝.

    posts - 14, comments - 23, trackbacks - 0, articles - 58
       :: 首頁 ::  :: 聯系 ::  :: 管理

    ADO提交多筆SQL的問題

    Posted on 2009-02-17 18:50 大大毛 閱讀(468) 評論(0)  編輯  收藏 所屬分類: VB

    使用ADO時經常都會遇到要利用事務批次提交SQL的情況,如果使用不當的提交方式會出現預料外的問題,現在先看下面的示例代碼:

    ?1?Private?Sub?cmdRun_Click()
    ?2?On?Error?GoTo?ErrHandle
    ?3?????Dim?con?As?Connection
    ?4?????Dim?strSQL?As?String
    ?5?????strSQL?=?""
    ?6?????'第一筆SQL1
    ?7?????strSQL?=?strSQL?&?"Insert?Into?tb1?Values?(...)"?&?vbNewLine
    ?8?????'第二筆SQL2
    ?9?????strSQL?=?strSQL?&?"Update?tb1?Set?C=1?Where?..."?&?vbNewLine
    10?????'...
    11?????'第N筆SQLn
    12?????strSQL?=?strSQL?&?"Delete?tb1?Where?..."?&?vbNewLine
    13?????Set?con?=?getCon()??'獲取/打開DB連線
    14?????'準備事務
    15?????con.BeginTrans
    16?????'一批一起執行
    17?????con.Execute?strSQL
    18?????'提交事務
    19?????con.CommitTrans
    20?ExitHandle:
    21?????If?con.State?=?1?Then?con.Close
    22?????Set?con?=?Nothing
    23?????Exit?Function
    24?ErrHandle:
    25?????con.RollbackTrans
    26?????GoTo?ExitHandle
    27?????MsgBox?Err.Description
    28?End?Sub

    ???上面這段程式利用換行符(分號也可)來將多條SQL合成一個字符串,最後在事務中執行一次就OK,既簡潔又漂亮的想法。
    ???看似OK,但實際卻是埋下了禍端。從事務的機制來看,在事務中提交的SQL應該是一起成功/失敗的,而且這裏也有利用異常捕獲機制來實現RollBack,那麼在使用時到底是會出現什麼情況呢?
    ???(0) SQL1,SQL2,...SQLn其中有語句含有非執行時的語法錯誤,比如說嵌套語句少掉一個右括號等;
    ??????OK。這種情況下,可以發現執行結果如預期,SQL1 -> SQLn都不會被執行,且會提示錯誤訊息。
    ???(1) SQL1,SQL2,...SQLn都執行成功;
    ??????OK。這種情況下,可以發現執行結果如預期,SQL1 -> SQLn都會被執行,可以正確提交事務。
    ???(2) SQL1,SQL2,...SQLn其中有語句會執行失敗;
    ??????(2.1) SQL1可以執行,而SQL2會發生執行時期錯誤(比如UPDATE上去欄位超過寬度);
    ?????????NO。Execute執行成功,查詢結果會發現SQL1的結果有提交,而SQL2以及之後的SQL都沒有執行。
    ??????(2.2) SQL1會發生執行時期錯誤(比如UPDATE上去欄位超過寬度),而SQL2及其後的SQL可以被執行;
    ?????????OK。這種情況下,可以發現有提示錯誤訊息,事務會被RollBack,SQL1 -> SQLn都不會被執行。

    ???通過上面的幾種情況可以得到結論,如果是以一整個字串(中間用換行或分號分隔)來提交多筆SQL命令時,在所有SQL語法檢查OK後,執行的成功與否取決於第1筆SQL的執行狀態,因此就是說如果第一筆SQL執行OK,那麼該事務就一定會被Commit

    ???所以說,在使用事務提交多筆SQL時不能使用上面的提交方式,而必須逐筆的提交才行。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    i am ddm

    主站蜘蛛池模板: 亚洲无人区视频大全| 国产一级淫片a视频免费观看| 亚洲视频在线精品| 色屁屁www影院免费观看视频| 日本免费高清一本视频| 白白色免费在线视频| 亚洲精品国产日韩无码AV永久免费网 | 亚洲图片校园春色| 免费不卡视频一卡二卡| 亚洲粉嫩美白在线| 日本久久久免费高清| 无码精品人妻一区二区三区免费| 亚洲一区日韩高清中文字幕亚洲| 国产精品99爱免费视频| 久久夜色精品国产嚕嚕亚洲av| 91成人免费观看| 亚洲精品免费网站| 日韩亚洲国产综合久久久| 精品无码一级毛片免费视频观看 | 久久精品亚洲男人的天堂| 国产真人无码作爱免费视频| 国产亚洲精品精华液| 久久国产色AV免费看| 亚洲人成综合网站7777香蕉| 国产精品二区三区免费播放心| 国产成人 亚洲欧洲| 日本亚洲欧洲免费天堂午夜看片女人员 | 成人在线免费看片| 精品亚洲成a人在线观看| 亚洲色欲一区二区三区在线观看| 国产午夜免费高清久久影院| 亚洲不卡在线观看| 亚洲精品一级无码中文字幕| 99久久免费看国产精品| 自拍偷自拍亚洲精品情侣| 无码囯产精品一区二区免费 | 人妻18毛片a级毛片免费看| 久久久久久亚洲Av无码精品专口 | 在线成人a毛片免费播放| 男女一进一出抽搐免费视频| 91亚洲性爱在线视频|