輕輕松松掌握ADO.NET事務(wù)處理方法技巧
事物是一組不可在分的Sql語(yǔ)句,在編程中也是很難解決的一個(gè)問(wèn)題,我們這里就ADO.NET事務(wù)處理方法簡(jiǎn)單的介紹,希望看過(guò)可以幫你解決這方面的問(wèn)題。
ADO.NET事務(wù)處理方法:
◆BeginTrans:開(kāi)始1個(gè)事務(wù);
◆CommitTrans:提交事務(wù),將事務(wù)中的操作寫(xiě)入數(shù)據(jù)源。
◆RollBackTrans:滾回事務(wù),取消操作。
#T#當(dāng)同時(shí)更新多個(gè)表時(shí),為了保證數(shù)據(jù)一致性而必須使用事務(wù),比如有兩個(gè)表,一個(gè)是支出表,一個(gè)是余額表,當(dāng)支出一項(xiàng)費(fèi)用時(shí),支出費(fèi)用增加,余額減少,需要對(duì)這兩個(gè)表同時(shí)更新,但如果不用事務(wù),倘若在更新支出表后發(fā)生錯(cuò)誤,則余額表沒(méi)有更新,不合要求。這時(shí)就要把它們封存裝到一個(gè)事務(wù)里。確保多表操作的完整性。此外,也可以用它對(duì)同一個(gè)表的多步操作進(jìn)行封裝,使多步操作成為單個(gè)單元。
一般地,我們?cè)贐eginTrans處加一條On Error Goto ErrNum的出錯(cuò)捕獲語(yǔ)句,然后在錯(cuò)誤處理程序中使用RollBackTrans取消事務(wù)。形如:
- cn.BeginTrans
- on Error Goto ErrNum
- …更新表1
- …更新表2
- …
- cn.CommitTrans
- Exit Sub
- ErrNum:
- cn.RollBackTrans
- msgbox //出錯(cuò)提示
事務(wù)可以嵌套,由begintrans方法返回1個(gè)長(zhǎng)整數(shù)表示當(dāng)前事務(wù)是第幾層,如返回1為當(dāng)前事務(wù)不包含在任何事務(wù)中。CommitTrans和 RollBackTrans結(jié)束最近的BeginTrans打開(kāi)的那個(gè)事務(wù)。在程序中用begintrans開(kāi)始1個(gè)事務(wù)后,應(yīng)使用 committrans或rollbacktrans方法結(jié)束,如果不用,則在程序結(jié)束后事務(wù)全部滾回,也就是說(shuō),系統(tǒng)不會(huì)自動(dòng)去提交任何事務(wù)。ADO.NET事務(wù)處理方法例如:
- cn.BeginTrans
- rst.MoveNext
- cn.Execute "insert into BB values('嫖客店','aaa',0,'0','0',0,'0')"
- cn.CommitTrans
有兩種情況需要說(shuō)明一下:在事務(wù)中也可能出現(xiàn)問(wèn)題,導(dǎo)致被迫放棄事務(wù):一種情況是一個(gè)關(guān)健字段被鎖定,不能進(jìn)行寫(xiě)操作;另一種情況是字段值超出范圍,如字段為Integer,但實(shí)際值大于32767,字段為T(mén)ext,但值字串長(zhǎng)超過(guò)32K等,這樣會(huì)導(dǎo)致事務(wù)強(qiáng)迫放棄。