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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android ScaleType详解

    android ScaleType详解转载自http://blog.csdn.net/larryl2003/article/details/6919513

    2022年6月21日
    33
  • MAC下最好用的抓包工具–charles简单操作教程

    MAC下最好用的抓包工具–charles简单操作教程一、Charles介绍给大家推荐一款在mac上我觉得很好用的抓包工具,再过去的半年中给我很大帮助,在工作学习中使用很方便。那么什情况下我们会需要使用抓包工具呢,比如我想查看一个接口请求的参数、返回值,还有移动设备上的http请求、https请求,有了charles一下搞定,妈妈再也不用担心我的学习了,咳咳……,回归正题,介绍一下charles。Charles是一个HTTP代理服务器…

    2022年6月12日
    59
  • java pfx_如何在Java读取PFX格式证书「建议收藏」

    java pfx_如何在Java读取PFX格式证书「建议收藏」X509CertificatekeyPairCert=x509Certs[0];intiKeySize=X509CertUtil.getCertificateKeyLength(keyPairCert);System.out.println(“证书密钥算法=”+keyPairCert.getPublicKey().getAlgorithm());System.out.println(“…

    2022年6月10日
    29
  • Android HandlerThread 完全解析[通俗易懂]

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/47079737;本文出自:【张鸿洋的博客】1、概述话说最近股市变动不变,也成了热火朝天的话题。不知道大家有没有考虑做个实时更新股市数据的app呢?假设我们要做一个股市数据实时更新的app,我们可以在网上找个第三方的股市数据接口,然后在我们的app中每隔1分钟(合适的

    2022年4月4日
    38
  • Depix初体验

    Depix初体验前情提要这几天有一个同学给我发了一张马赛克图,问我能不能还原?图片如上。我一看,这被马成什么鬼样子了,谁能还原得了?不过我忽然想到,我在公众号上看到一个名字叫做”Depix”的Github项目。然而近期在Github上,又出现了一款号称能抹去马赛克让原图重现的神器,引发海内外热议。这款工具名为Depix,上线没几天就在GitHub上标星已超过一万多,截止目前累计分支也超过了1.3k个。让它火出圈子的,就是下面这张效果图:如图所示,第一行是打了一层巨厚马赛克完全像素化后的文本内容,看不出

    2022年6月30日
    116
  • 重绘和回流以及如何优化

    重绘和回流以及如何优化1 浏览器渲染机制浏览器采用流式布局模型 FlowBasedLay 浏览器会把 HTML 解析成 DOM 把 CSS 解析成 CSSOM DOM 和 CSSOM 合并就产生了渲染树 RenderTree 有了 RenderTree 我们就知道了所有节点的样式 然后计算他们在页面上的大小和位置 最后把节点绘制到页面上 由于浏览器使用流式布局 对 RenderTree 的计算通常只需要遍历一

    2025年8月3日
    3

发表回复

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

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