以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  不同数据源的事务怎么设置?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=121619)

--  作者:luodang2050
--  发布时间:2018/7/10 15:43:00
--  不同数据源的事务怎么设置?
如下:分别对两个数据源的表进行操作(log_insert为插入日志,str_insert为新增行),怎么执行事务才能保持一致?
个人理解:假设数据表数据验证不通过导致失败,将触发日志回滚?
Try    
           Connections(gs_strActiveConn).BeginTransaction()
           cmd.ConnectionName = gs_strActiveConn
           cmd.CommandText = log_insert
           cmd.ExecuteNonQuery
   Connections(gs_strActiveConn).Commit \'提交事务,所有操作生效
           cmd.ConnectionName = sqlcoon \'sqlcoon有可能与日志不同数据源
           cmd.CommandText = str_insert
           cmd.ExecuteNonQuery \'插入数据
Catch ex As Exception \'如果出错
Connections(sqlcoon).Rollback() \'回滚事务,撤销所有操作
End Try
[此贴子已经被作者于2018/7/10 15:49:25编辑过]

--  作者:有点甜
--  发布时间:2018/7/10 15:58:00
--  
分别开启两个数据源的事务,一起提交一起回滚。如果出错,回滚两个。
--  作者:luodang2050
--  发布时间:2018/7/10 16:11:00
--  
是修改成如下么?那假如事务1执行成功,事务2失败,回滚还能生效?
Try    
           Connections(gs_strActiveConn).BeginTransaction()
   Connections(sqlcoon).BeginTransaction()
           cmd.ConnectionName = gs_strActiveConn
           cmd.CommandText = log_insert
           cmd.ExecuteNonQuery
           cmd.ConnectionName = sqlcoon \'sqlcoon有可能与日志不同数据源
           cmd.CommandText = str_insert
           cmd.ExecuteNonQuery \'插入数据
   Connections(gs_strActiveConn).Commit \'提交事务,所有操作生效
   Connections(sqlcoon).Commit \'提交事务,所有操作生效
Catch ex As Exception \'如果出错
Connections(gs_strActiveConn).Rollback() \'回滚事务,撤销所有操作
Connections(sqlcoon).Rollback() \'回滚事务,撤销所有操作
End Try

--  作者:有点甜
--  发布时间:2018/7/10 16:21:00
--  
如果sql语句执行错误ExecuteNonQuery,是不会执行下面的提交事务代码的,回滚即可。