找回密码
 立即注册

QQ登录

只需一步,快速开始

yy5512
金牌服务用户   /  发表于:2024-6-10 11:01  /   查看:1252  /  回复:7
本帖最后由 Brian.Zhang 于 2024-7-10 10:27 编辑

比如已经写好一个服务端命令A,A已经做好了关于更新数据库数据的Try-Catch+事务命令控制,保持数据一致性。

在写另外一个服务端命令B的时候,也做好了Try-Catch+事务命令控制。但是B命令事务控制范围之内,需要根据条件来是否执行服务端命令A。

经过测试,我发生执行B的过程中,如果B本身事务内部不报错,且按条件执行到A命令中,同时A命令执行过程中报错,A事务控制自动回滚了数据,但是B命令已经执行的更新并不会回滚。

建议增加事务回滚的命令,这样我B中在执行A时,可以根据A的返回信息来控制B是否需要回滚,以确保数据一致性。

这类问题在sqlserver的存储过程中是比较好实现的,相信活字格应该也不难。

7 个回复

倒序浏览
yy5512
金牌服务用户   /  发表于:2024-6-10 13:27:15
沙发
如果在事务控制命令中,增加一个“事务名”的变量,同时增加一个事务回滚的命令,选择回滚事务,这样在执行A的时候,可以根据A返回的错误码来决定是否要回滚B里面的事务了。
回复 使用道具 举报
yy5512
金牌服务用户   /  发表于:2024-6-10 13:29:28
板凳
或者增加一个手动抛出异常的命令,根据A返回的错误码,手动抛出B事务的异常,这样也能控制B来回滚。
回复 使用道具 举报
yy5512
金牌服务用户   /  发表于:2024-6-10 14:06:48
地板
格友启发了一个想法,A返回错误时,人为造成一个错误的数据库操作,是的B命令自动回滚。但是总感觉有点怪,希望增加“回滚事务”,或者“抛出异常”命令。
回复 使用道具 举报
yy5512
金牌服务用户   /  发表于:2024-6-10 20:57:46
5#
收贴,无意中发现“返回命令”中如果返回值给定>0,就能起到抛出异常回滚的效果。新加一个帖子,求公布原版Exception Code的清单,用来错开官方错误码。
回复 使用道具 举报
Brian.Zhang
超级版主   /  发表于:2024-6-11 18:57:24
6#
当前问题解决了就好。
至于公布原版Exception Code的清单,我可以给您确认一下后回复。
回复 使用道具 举报
yy5512
金牌服务用户   /  发表于:2024-7-8 14:31:35
7#
可以收贴了
回复 使用道具 举报
Brian.Zhang
超级版主   /  发表于:2024-7-10 10:27:41
8#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部