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


相关推荐

  • Oracle INSERT INTO SELECT

    Oracle INSERT INTO SELECTINSERTINTOtarget_table(col1,col2,col3)SELECTcol1,col2,col3FROMsource_tableWHEREcondition;

    2022年7月15日
    17
  • detour使用教程_devour怎么使用道具

    detour使用教程_devour怎么使用道具Detours的安装:下载部分:1.直接在百度搜"detour",进对应的网站下载。2.或以下链接https://www.microsoft.com/en-us/research/

    2022年8月5日
    30
  • http,socks5,socks4代理的区别[通俗易懂]

    http,socks5,socks4代理的区别[通俗易懂]HTTP代理:能够代理客户机的HTTP访问,主要是代理浏览器访问网页,它的端口一般为80、8080、3128等;SOCKS代理:SOCKS代理与其他类型的代理不同,它只是简单地传递数据包,而并不关心是何种应用协议,既可以是HTTP请求,所以SOCKS代理服务器比其他类型的代理服务器速度要快得多。SOCKS代理又分为SOCKS4和SOCKS5,二者不同的是SOCKS4代理只支持TCP协议(即传输…

    2022年6月15日
    40
  • TCP 协议(包含三次握手,四次挥手)[通俗易懂]

    TCP 协议(包含三次握手,四次挥手)[通俗易懂]TCP特性1.确认应答(可靠传输的最核心机制)1.确认应答(可靠传输的最核心机制)可靠传输的最核心机制

    2022年5月5日
    66
  • 关于净推荐值(NPS)的理解

    关于净推荐值(NPS)的理解NPS在产品领域用来衡量用户对产品体验的评价情况,同时也可以用在某个员工在公司受到大家的评价情况,类似等等。本文将主要关注在产品领域。如何衡量你的用户对产品的使用满意度呢?NPS就是一个非常重要的标准。那么,如何搭建NPS模型,利用NPS指标更加直观、具体地完成用户调研呢?以下,笔者将详细为大家讲述。现在几乎所有的互联网公司,都会说:“以用户为中心”,那到底是什么以用户为中心?…

    2022年4月28日
    74
  • goland破解激活码【在线破解激活】

    goland破解激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    93

发表回复

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

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