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)
上一篇 2022年6月3日 上午8:00
下一篇 2022年6月3日 上午8:16


相关推荐

  • 各种数据库的分页查询语句[通俗易懂]

    各种数据库的分页查询语句

    2022年3月2日
    49
  • 继续推广我的新博客xysay:http://www.xysay.com/

    继续推广我的新博客xysay:http://www.xysay.com/

    2021年11月23日
    44
  • 飞机订票系统测试用例

    飞机订票系统测试用例1、登录界面的标题为“航班预订登录界面”;2、代理名称由4位或者以上的字母和数字组成,不超过8位,不能由纯数字组成或者数字开头,否则系统提示给出相应的提示“代理名称不能由纯数字组成,请重新输入”或“代理名称不能由数字开头,请重新输入”。代理名称长度小于4位时,点击确认按钮,系统弹出提示对话框提示“代理名称长度必须至少为4个字符,请重新输入”;代理名称长度大于8位时,点击确认按钮,系统弹出提

    2022年6月17日
    63
  • pytest parametrize fixture_参数化方法

    pytest parametrize fixture_参数化方法前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

    2022年7月30日
    8
  • navacate连接不上mysql_navicat连接mysql失败怎么办

    navacate连接不上mysql_navicat连接mysql失败怎么办Navicat 连接 mysql 数据库时 不断报 1405 错误 下面是针对这个的解决办法 MySQL 服务器正在运行 停止它 如果是作为 Windows 服务运行的服务器 进入计算机管理 gt 服务和应用程序 gt 服务 如果服务器不是作为服务而运行的 可能需要使用任务管理器来强制停止它 创建 1 个文本文件 此处命名为 mysql init txt 并将下述命令置于单一行中 SETPASSW

    2025年7月10日
    8
  • ViewPager的addOnPageChangeListener方法详解

    ViewPager的addOnPageChangeListener方法详解关于上篇博客中写道了ViewPager的拖动状态监听的方法有网友私信问我不太明白里面的逻辑,我估摸着还是对ViewPager不太熟悉,所以就没一一回复在此开篇帖子写下关于ViewPager的具体用法,ViewPage使用时,最关键的代码就是addOnPageChangeListener,传入一个ViewPager.OnPageChangeListener对象。下面做先给大家贴上google的官方源

    2022年7月22日
    24

发表回复

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

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