SqlTransaction.Dispose,RollBack ?「建议收藏」

SqlTransaction.Dispose,RollBack ?「建议收藏」一个体会记在此:SqlTransaction.Dispose 如果之前没有提交事务,譔方法就会调用RollBack(Willrollbackifnotcommited)。之前写的代码:using(SqlConnectionconn=dbo.CreateCo

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

一个体会记在此:

SqlTransaction.Dispose 如果之前没有提交事务,譔方法就会调用RollBack(Will rollback if not commited )。

之前写的代码:

   using (SqlConnection conn = dbo.CreateConnection as SqlConnection)
            {
                if (conn != null && conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

                SqlTransaction tran = conn.BeginTransaction();

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))
                {
                    try
                    {
                        bulkCopy.BatchSize = 50;
                        bulkCopy.DestinationTableName = "ekeyv2_unbind";
                        bulkCopy.BulkCopyTimeout = 60;

                        // 映射表结构
                        bulkCopy.ColumnMappings.Add("ekey_company", "ekey_company");
                        bulkCopy.ColumnMappings.Add("ekey_sn", "ekey_sn");
                        bulkCopy.ColumnMappings.Add("unbind_status", "unbind_status");
                        bulkCopy.ColumnMappings.Add("retry_times", "retry_times");
                        bulkCopy.ColumnMappings.Add("create_time", "create_time");
                        bulkCopy.ColumnMappings.Add("user_id", "user_id");
                        bulkCopy.ColumnMappings.Add("account", "account");
                        bulkCopy.ColumnMappings.Add("ekey_type", "ekey_type");

                        bulkCopy.WriteToServer(table);

                        tran.Commit();
                        isSuccess = true;

                    }
                    catch 
                    {
                        tran.Rollback();
                        isSuccess = false;
                    }
                }

                if (conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                }

                 conn.Dispose();
          }

 

 

写事务可以节的写为:

  using (SqlConnection conn = dbo.CreateConnection as SqlConnection)
            {
                if (conn != null && conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }

                SqlTransaction tran = conn.BeginTransaction();

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))
                {
                    bulkCopy.BatchSize = 50;
                    bulkCopy.DestinationTableName = "ekeyv2_unbind";
                    bulkCopy.BulkCopyTimeout = 60;

                    // 映射表结构
                    bulkCopy.ColumnMappings.Add("ekey_company", "ekey_company");
                    bulkCopy.ColumnMappings.Add("ekey_sn", "ekey_sn");
                    bulkCopy.ColumnMappings.Add("unbind_status", "unbind_status");
                    bulkCopy.ColumnMappings.Add("retry_times", "retry_times");
                    bulkCopy.ColumnMappings.Add("create_time", "create_time");
                    bulkCopy.ColumnMappings.Add("user_id", "user_id");
                    bulkCopy.ColumnMappings.Add("account", "account");
                    bulkCopy.ColumnMappings.Add("ekey_type", "ekey_type");

                    bulkCopy.WriteToServer(table);
                }

                tran.Commit();
            }

 

注意:using(){},出了using,conn就会调用Dispose,故这里不用RollBack.

 

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

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

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


相关推荐

  • ORACLE SEQUENCE 权限

    ORACLE SEQUENCE 权限
    ORACLESEQUENCE的简单介绍
    如何修改sequence的权限(将用户aaa下的sequence查询权限分配给用户bbb):
    connaaa/aaa
    grantselect onsequencenametobbb
    connbbb/bbb
    selectaaa.sequencename.nextvalfromdual
     
    授予和收回权限
    grantselectonseq_teamme

    2022年10月19日
  • 30岁之后,人的命运就藏在《周易》中,看懂受益一生!

    30岁之后,人的命运就藏在《周易》中,看懂受益一生!

    2022年2月20日
  • 如何实现分布式缓存_分布式数据库缓存

    如何实现分布式缓存_分布式数据库缓存本文转载自https://msdn.microsoft.com/zh-cn/library/ff384253.aspx,主要内容是对msdn中对AppFabric分布式缓存的介绍的整合以及一些自己的理解。AppFabric是什么  AppFabric是微软提供的可以集成到Web应用程序和桌面应用程序的分布式缓存。其原名为Velocity,后更名为AppFabric。AppFabric能够提高

    2022年10月16日
  • PHP解决高并发问题

    PHP解决高并发问题我们通常衡量一个Web系统的吞吐率的指标是QPS(QueryPerSecond,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目)。那么,我们的Web系统的理论峰值QPS为(理想化的计算方式):20*500/0.1=100000(10万QPS)咦?我们的系统似乎很强大,1秒钟可以处理完10万的请求,5w/

    2022年5月31日
  • Pytest(15)pytest分布式执行用例[通俗易懂]

    Pytest(15)pytest分布式执行用例[通俗易懂]前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年8月6日
  • 解决Linux TIME_WAIT过多造成的问题[通俗易懂]

    解决Linux TIME_WAIT过多造成的问题[通俗易懂]1、time_wait的作用:TIME_WAIT状态存在的理由:1)可靠地实现TCP全双工连接的终止在进行关闭连接四次挥手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN,因此客户端必须维护状态信息允许它重发最终的ACK。如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出co…

    2022年6月10日

发表回复

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

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