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