TransactionScope TransactionAbortedException

TransactionScope TransactionAbortedException今天在调试代码的时候遇到一个这样的错误:System.Transactions.TransactionAbortedExceptionwascaughtHResult=-2146233087Message=Thetransactionhasaborted.Source=System.Transactions查了一下原因,主要是由于嵌套事务中,底层事务没有关闭,然…

大家好,又见面了,我是你们的朋友全栈君。

今天在调试代码的时候遇到一个这样的错误:

System.Transactions.TransactionAbortedException was caught
HResult=-2146233087
Message=The transaction has aborted.
Source=System.Transactions

 

查了一下原因,主要是由于嵌套事务中,底层事务没有关闭,然后上层继续使用导致的,不过前提是TransactionScope中使用的是TransactionScopeOption.Required

代码示例:

public void TransactionScopeTest()
        {
            using(TransactionScope ts=new TransactionScope(TransactionScopeOption.Required))
            {
                //do something

                using(TransactionScope tsa=new TransactionScope(TransactionScopeOption.Required))
                {
                    //do A
                    tsa.Complete();
                }

                using (TransactionScope tsb = new TransactionScope(TransactionScopeOption.Required))
                {
                    //do B
                    tsb.Complete();
                }
                ts.Complete();
            }
        }

上述代码时一个TransactionScope内嵌两个TransactionScope,如果tsa.Complete()没有执行,

那么在using (TransactionScope tsb = new TransactionScope(TransactionScopeOption.Required))就会抛出TransactionAbortedException异常:The transaction has aborted

 

所以在使用TransactionScope的时候要注意,嵌套使用的时候,如果出现问题需要尽快的抛出,而不是任由其继续走下去,比如:

public void TransactionScopeTest()
        {
            using(TransactionScope ts=new TransactionScope(TransactionScopeOption.Required))
            {
                //do something
                bool isASuccess = true;
                using(TransactionScope tsa=new TransactionScope(TransactionScopeOption.Required))
                {
                    //do A
                    tsa.Complete();
                }
                if(!isASuccess)
                {
                    return;
                }

                bool isBSuccess = true;
                using (TransactionScope tsb = new TransactionScope(TransactionScopeOption.Required))
                {
                    //do B
                    tsb.Complete();
                }
                if(!isBSuccess)
                {
                    return;
                }

                ts.Complete();
            }
        }

 

转载于:https://www.cnblogs.com/lvjianwei/p/5177447.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)

    当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)如何解决python2和python3的兼容问题,pip报错问题

    2022年7月6日
    19
  • 焦点科技怎么老是招人_选错对焦点,错失好照片,你了解相机的对焦吗?

    焦点科技怎么老是招人_选错对焦点,错失好照片,你了解相机的对焦吗?对焦一直是衡量相机的性能的重要参数,在很长的一段时间里,我们因为相机的对焦系统不够强大,而习惯的单点手动设置对焦。而近几年微单相机的对焦快速发展,眼部自动对焦已经比较成熟,而我们的习惯也应该发生改变……选错对焦点,错失好照片多好的构图,妹子笑的多甜,然而就是因为焦点没有对准,成功的变成一张废片。很多人和我抱怨过,什么镜头跑焦,机身跑焦,可是你们有没有从自身找过原因,当真找到正确的焦点,准确合…

    2022年6月6日
    329
  • ubuntu安装python3_在Ubuntu中安装Python3

    ubuntu安装python3_在Ubuntu中安装Python3原博文2012-09-2517:15−首先,通过命令行安装Python3.2,只需要在终端中通过命令行安装即可:sudoapt-getinstallpython3一路yes。因为Ubuntu很多底层采用的是Python2.*,Python3和Python2是互相不兼容的,所以此时不能卸载Python2,需要将默认Pyth…154567相关推荐2017-12-2722:00…

    2022年6月23日
    41
  • Eurake和Zookeeper的区别

    Eurake和Zookeeper的区别拉取方式zookeeper通知消费者来拿Eurake是定时去拿集群方式zookeeper分主从eureka没有主从之分设计角度不同capc 一致性 a 可用性 p 分区容错区 如果zookeeper的主集群挂掉之后那么整个zookeeper的集群就无法对外提供服务,大多数情况可以容忍一段时间的脏数据但是不能接收整个注册中心无法对外提供服务。所以在设计时zookeeper强调cp(c在官网的解释是一致性,底层有一个queu…

    2022年5月27日
    70
  • 股票软件开发

    股票软件开发求助编辑百科名片股票软件开发顾名思义就是股票软件开发公司为公司或个人开发制作自已个性化的股票分析软件,从此彻底告别依赖别人的技术平台支持,从股票软件名称,公司LOGO,启动界面,系统功能,特色指标、特色选股、软件注册后台,信息发布平台,机构数据,主力行情,大盘分析,个股分析,资金分析,热点分析等等一系列功能上实行自已品牌化管理运行。目录

    2022年4月10日
    91
  • linux下载文件到本地苹果,从Linux服务器下载文件到本地命令

    linux下载文件到本地苹果,从Linux服务器下载文件到本地命令从Linux服务器下载文件夹到本地一、使用scp命令linuxscp/home/work/source.txtwork@192.168.0.10:/home/work/#把本地的source.txt文件拷贝到192.168.0.10机器上的/home/work目录下shellscpwork@192.168.0.10:/home/work/source.txt/home/work/#把1…

    2022年8月24日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号