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


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

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

帅哥哟,离线,有人找我吗?
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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/10 15:58:00 [只看该作者]

分别开启两个数据源的事务,一起提交一起回滚。如果出错,回滚两个。

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/10 16:21:00 [只看该作者]

如果sql语句执行错误ExecuteNonQuery,是不会执行下面的提交事务代码的,回滚即可。

 回到顶部