Foxtable(狐表)用户栏目专家坐堂 → 不同数据源的事务怎么设置?


  共有2241人关注过本帖树形打印复制链接

主题:不同数据源的事务怎么设置?

帅哥哟,离线,有人找我吗?
luodang2050
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
不同数据源的事务怎么设置?  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By: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

 回到顶部