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


相关推荐

  • Sereja and Suffixes

    Sereja and Suffixes J- SerejaandSuffixesTimeLimit:1000MS     MemoryLimit:262144KB     64bitIOFormat:%I64d&%I64uSubmit StatusDescriptionSerejahasanarray a,consistingof n integers a1, a2, …, …

    2025年7月5日
    0
  • 学成在线源代码(学成网首页代码)

    首先同一目录下放置三个文件夹(imagesxxx.htmlstyle.css)图片:头部区域分四个模块:logo(图片)导航栏(无序列表)搜索(文本输入框、button按钮)用户(图片)<divclass=”headerw”><!–logo部分–><divclass=”logo”><!–alt显示未加载时,所提示的文字,title显示鼠标放上时,所提示的文件

    2022年4月16日
    161
  • @MapperScan注解怎么用

    @MapperScan注解怎么用早点的时间是直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,比较麻烦。现在通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,比如:@SpringBootApplication@MapperScan("com.lz.water.monitor.mapper")//添加对mapper包扫描publicclassApplica…

    2022年6月4日
    36
  • 关于.gitignore不起作用「建议收藏」

    关于.gitignore不起作用「建议收藏」由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:有时我们发现添加.gitignore文件后并没有忽略我们想要忽略的文件,解决方法就是清除一下缓存,原因gitignore对已经追踪(track)的文件无效,清除缓存后文件将以未追

    2022年10月21日
    1
  • python处理亿级大数据(rar暴力破解器安卓版)

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/85566045今天是2019年元旦,首先祝大家元旦快乐,在这个喜庆的日子里,不知道大家有没有坚持研究自己所在领域的知识。其实,每项知识、技能的积累,需要的是日复一日的坚持,正所谓——持之以恒,贵在坚持,这样才能做到每天进步一点点。好了,步入正题,今天,闲来无事,基于Python…

    2022年4月15日
    48
  • 微信小程序报错 errcode: 40029, errmsg: “invalid code

    微信小程序报错 errcode: 40029, errmsg: “invalid code小程序报错errcode:40029,errmsg:&quot;invalidcode,hints:[req_id:************]今天在进行小程序开发过程中,需要登录获取用户的openID信息当调用wx.login后,进一步需要根据所得的code码进行登录凭证校验微信小程序官方文档-wx.loginerrcode:40029,errmsg:&quot;i…

    2022年5月5日
    406

发表回复

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

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