VB中的事務(wù)處理_第1頁
VB中的事務(wù)處理_第2頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、最新資料推薦 最新精品資料整理推薦.更新于二O二 O 年十二月十八口 2020年12月18日星期五19:36:31 VB中的事務(wù)處理有一下兩種方式: 1. conn. BeginTrans ,開始 執(zhí)行語句 conn. Execute sql If Err Number = 0 Then conn. CommitTrans - 提交事務(wù) Else conn. Ro1IbackTransact ion MsgBox 失敗 End If 2 On Error GoTo err_trans intTrans = newConn. BeginTrans 開始事務(wù) newConn. Execute sq

2、l newConn. CommitTrans 提交事務(wù) intTrans = 0 newConn. Close 關(guān)閉連接 MsgBox OK exit_trans: Set newConn = Nothing 釋放對象 Exit Sub 退出過程 err.trans: 錯(cuò)誤跳到這兒處理 如果是事務(wù)處理中出錯(cuò),則事務(wù)回滾 If intTrans = 1 Then newConn. RollbackTrans End If Resume exit_trans 看起來兩種方式都沒什么問題,但是在我的項(xiàng)里使用笫一種方式卻遇 到了一個(gè)很奇怪的錯(cuò)誤,大家見 下圖: 最新資料推薦 最新精品資料整理推薦.更新

3、于二O二 O 年十二月十八口 2020年12月18日星期五19:36:31 很明顯我使用的是sql,不是存儲過程,而且我的sql在查詢分析器里 運(yùn)行的完全正常,它卻說我有誤,真是讓我百思不得其解。 更加奇怪的是, 這個(gè)錯(cuò)誤只在項(xiàng)U生成exe以后才會冒出來, 也就是說 在開發(fā)階段,在VB工程里面運(yùn)行的是好好的,一旦到開發(fā)的差不多了,打包 生成exe文件,生成的過程不會出錯(cuò),運(yùn)行到特定代碼調(diào)用這里的時(shí)候才會岀 錯(cuò)!這實(shí)在是個(gè)郁悶的問題,因?yàn)?在項(xiàng)H剛開始的時(shí)候一般不會生成exe文件 來測試運(yùn)行,而是直接在VB開發(fā)環(huán)境下運(yùn)行,在這種情況下是運(yùn)行的好好的, 所以到了項(xiàng)目后期可著實(shí)讓我忙亂了好久,一直找

4、不到原因,不知道大 家有沒有遇到過 后來我使用了2方法, 這個(gè)就沒岀問題了, 不過還是有些地方要注意 的,我在這里提醒一下大家吧,也算是對自己研究的總結(jié): 首先看如下代碼: On Error GoTo err_trans intTrans = newConn. BeginTrans ,開始事務(wù) sql 二insert into Sales (dishid, uid) values (8,2); insert into Sales(dish_id, uid) values (8, 2)/ 這里面有兩句sql,在查詢分析器里執(zhí)行都是沒有問題的 newConn. Execute sql newCon

5、n. CommitTrans intTrans = 0 newConn. Close MsgBox OK exit_trans: Set newConn = Nothing Exit Sub err.trans: 錯(cuò)誤跳到這兒處理 如果是事務(wù)處理中出錯(cuò),則事務(wù)回滾 If intTrans = 1 Then newConn. RollbackTrans MsgBox false End If Resume exit_trans 執(zhí)行的過程中沒遇到任何問題,彈出0K7下面我們改一下sql,將笫 一句的id值插入字符串a(chǎn)aaa* sql = insert into Sales (dish_id, u

6、id) values aaaa? , 2): insert into Sales(dish_id, uid) values (8, 2); 意料之中,彈出了z,false事務(wù)回滾了,而且數(shù)據(jù)庫中的數(shù)據(jù)也沒有 增加,下面再做另外一個(gè)實(shí)驗(yàn): 將第二句的 id 值插入字符串a(chǎn)aaa* 關(guān)閉連接 釋放對象 退出過程 最新資料推薦 最新精品資料整理推薦.更新于二O二 O 年十二月十八口 2020年12月18日星期五19:36:31 sql = *insert into Sales(dish_id, uid) values (8, 2); insert into Sales(dish.id, uid) v

7、alues (,aaaa1 ; 再次執(zhí)行, 讓我驚訝的是居然彈出了z,0K怎么會這樣呢, 急忙查看數(shù) 據(jù)庫發(fā)現(xiàn)數(shù)據(jù)并沒有增加,還好! 靜下心來思考,一番,大概對VB的事務(wù)形式做了如下推斷: 1 正常情況下,正常執(zhí)行,這個(gè)沒有任何問題 2.如果傳給Execute方法的sql不是一條語句, 而是多條語句 的,那么: d如果第一條語句發(fā)生了錯(cuò)誤,那么它會跳到 newConn. RollbackTrans 代碼處,正常的回滾事務(wù),如果在這 里我們需要返回 值或者給出提示的話是可以給出正確的提示的(可以返回 false 或者提示 操 作失敗) b.如果在這多條 sql 中,不是第一條發(fā)生錯(cuò)誤的,那么就有

8、問 題了,你會發(fā)現(xiàn),這時(shí)候無法給出正確的提示了,操作人員會看到返回 true, 或者提示操作成功,可是鬼魅的是數(shù)據(jù)庫里并沒有增加記錄(包括前面正常的 數(shù)據(jù)也沒有被插入),我通過單步調(diào)試發(fā)現(xiàn),確實(shí)程序的并沒有執(zhí)行到 newConn. RollbackTrans 這句代碼,可是數(shù)據(jù)確實(shí)回滾了,這說明了第一條語 句執(zhí)行成功,VB 接收到了這個(gè)返回值,就把整個(gè)事務(wù)給 commit 了,也就是說 這個(gè)回滾根本不是 VB 里面的 newConn. RollbackTrans 代碼來完成的,而是數(shù) 據(jù)庫完成的(字符型換成整型失敗) 山于一些特殊的業(yè)務(wù)需要, 我們經(jīng)常會岀現(xiàn)拼接sql的情況, 也就是下 面的情

9、況: For j = 0 To 10 注意減 1 sql=sql & insert into Sales (dishid, uid) values . Next j 我這里只是一些事例代碼,但是可以看出上面的sql已經(jīng)是10條sql 了,如果這時(shí)候調(diào)用newConn. Execute sql,那么 按照前面的分析, 如果錯(cuò)誤不是發(fā)生在笫一條sql而是在后面的sql的 話,那么你的得到的返回值或者提示是不正確的, 也就是你看到了操作成功,但是實(shí)際上并沒有數(shù)據(jù)的情況(事實(shí)證明確實(shí) 如此)。解決的辦法很簡單,在for之前開始事務(wù), 并在其中一句一句執(zhí)行sql,在next后面做事務(wù)的處理,如下代碼: On Error GoTo err_trans intTrans = conn. BeginTrans 開始事務(wù) X = count 最新資料推薦 最新精品資料整理推薦.更新于二O二 O 年十二月十八口 2020年12月18日星期五19:36:31 For i = 0 To X sql二insert into Sales(dish_id, uid) values . conn. Execute sql Next j conn. CommitTrans 提交事務(wù) intTrans = 0 MsgBox OK exit

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論