以下是引用片段: On Error Resume Next 第一步: 在事務(wù)環(huán)境下把用戶信息記入數(shù)據(jù)庫(kù) If Err Then 關(guān)閉連接 退出 Else 第二步:創(chuàng)建文件夾 If Err Then 回滾第一步數(shù)據(jù)庫(kù)操作,退出 Else 第三步:在事務(wù)環(huán)境下操作日志數(shù)據(jù)庫(kù) If Err Then 回滾第一步操作,刪除第二步建立的文件夾 退出 End If End If End If 提交第一步數(shù)據(jù)庫(kù)操作的事務(wù) 提交第二步數(shù)據(jù)庫(kù)操作的事務(wù) End
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("Scripting.FilesystemObject") FSO.CreateFolder "...."
If Err Then ObjectContext.SetAbort '通知所有支持事務(wù)的組件回滾,并運(yùn)行手工回滾代碼 Else ObjectContext.SetComplete End If Set FSO=Nothing
Sub OnTransactionAbort Response.Write "錯(cuò)誤" FSO.DeleteFile Server.Mappath("a.txt") 'FSO的手工回滾——?jiǎng)h除文件夾 End Sub Sub OnTransactionCommit Response.Write "勝利完成任務(wù)" End Sub %>
if conn.Errors.Count=0 then conn.CommitTrans '如果沒(méi)有conn錯(cuò)誤,則執(zhí)行事務(wù)提交 else conn.RollbackTrans '否則回滾 end if %>
以上代碼經(jīng)調(diào)試,可以正常的進(jìn)行事務(wù)處理。但是有時(shí)候,我們并不想將編譯錯(cuò)誤顯示給用戶。 則我們需要在conn.BeginTrans后面加上On error resume next 但是因?yàn)橛玫搅薕n error resume next。conn.Errors.Count只能獲得最后一個(gè)數(shù)據(jù)庫(kù)操作的conn返回的結(jié)果 。上面的三個(gè)sql語(yǔ)句,因?yàn)樽詈笠粋€(gè)sql語(yǔ)句是正確的,則此事務(wù)處理就無(wú)效了。那我們需要對(duì)出錯(cuò)處理作出相對(duì)應(yīng)的修改。 if conn.Errors.Count=0 then應(yīng)該改為if err.number=0 then 這樣,我們可以在數(shù)據(jù)庫(kù)回滾后同時(shí)做出其他相對(duì)應(yīng)的操作或者提示。修改后的代碼如下: 以下是引用片段: % set conn=server.CreateObject("adodb.connection") strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=." conn.Open strConn '以上代碼建立數(shù)據(jù)庫(kù)連接 conn.BeginTrans '事務(wù)開(kāi)始 on error resume next '增加的代碼 strSql1="update a set num=1000 where id=24" '第一個(gè)sql語(yǔ)句為update。(語(yǔ)法正確) strSql2="insert into a(num) values('a')" '第二個(gè)sql語(yǔ)句為錯(cuò)誤的sql語(yǔ)句 strSql3="insert into a(num) values(33333)" '第三個(gè)sql語(yǔ)句為正確的sql語(yǔ)句
if err.number =0 then conn.CommitTrans '如果沒(méi)有conn錯(cuò)誤,則執(zhí)行事務(wù)提交 else conn.RollbackTrans '否則回滾 '回滾后的其他操作 strerr=err.Description Response.Write "數(shù)據(jù)庫(kù)錯(cuò)誤!錯(cuò)誤日志:font color=red>"strerr "/font>" Response.End end if %>