On Error GoTo ErrorHandler Dim ssql As String If DbConnection Then Cn.BeginTrans ssql = "insert into test1(PID,UID,PS) Values(1,'1','1');" _ & "insert into test1(PID,PS) Values(2,PS) Values(3,PS) Values(4,'1');" Cn.Execute ssql ssql = "insert into test1(PID,PS) Values(5,'2');" _ & "insert into test1(PID,PS) Values(6,'1');" _ & "insert into test5(PID,PS) Values(7,'1');" Cn.Execute ssql Cn.CommitTrans MsgBox "执行成功",vbInformation End If Exit Sub ErrorHandler: Cn.RollbackTrans MsgBox Err.Description,vbInformation
其中 test5 表是不存在的 但是 这个事物是会执行成功的 。
可能原因 ado其实不判断事物的 他交给后台判断 但是 后台遇到多条sql时候只会检测返回第一条的判断结果
如果
ssql = "insert into test5(PID,'1');" _ & "insert into test1(PID,'1');"则 事物就会回进行回滚。
sql = "insert into test5(PID,'2');"这样 ado就会正确的判断出结果。sql = "insert into test1(PID,'1');"