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


相关推荐

  • python学得好、进监狱进的快_最经典的100部美剧,看到第一名瞬间服气!

    python学得好、进监狱进的快_最经典的100部美剧,看到第一名瞬间服气!(1999-Present)NBC80、摩登原始人TheFlintstones(1960-1966)ABC79、芝麻街SesameStreet(1969-Present)PBS78、奉子成婚MarriedwithChildren(1987-1997)Fox77、丑闻Scandal(2012-Present)ABC76、欢乐满屋FullHouse(1987-1995)…

    2022年9月30日
    0
  • 信息学奥赛一本通(C++版) 网站补充题目

    信息学奥赛一本通(C++版) 网站补充题目总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716信息学奥赛一本通(C++版)网站补充题目http://ybt.ssoier.cn:8088//1414【2017NOIP普及组】成绩//样例通过,提交AC2017-12-3121:45#include<stdio.h>intmain(){…

    2025年7月13日
    1
  • 如何进行大数据处理?大数据处理的方法步骤[通俗易懂]

    如何进行大数据处理?大数据处理的方法步骤[通俗易懂]1.大数据处理之一:采集大数据的采集是指利用多个数据库来接收发自客户端(Web、App或者传感器形式等)的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有…

    2022年5月16日
    73
  • FRP 内网穿透下载配置[通俗易懂]

    FRP 内网穿透下载配置[通俗易懂]FRP内网穿透下载配置Frp服务的建造下载:修改配置文件frps.ini(服务端)配置文件解释说明:frpc.ini(客户端)配置文件解释说明:启动服务配置启动:创建server端服务脚本:(centos6)创建客户端服务脚本:公网服务器端:CentOS6防火墙配置文件位置CentOS7防火墙配置文件位置联系我Frp服务的建造搭建FRP很简单,关键的步骤只有三步:1,获取FRP文件;2,设置FRP配置文件;3,启动FRP服务。下载:下载地址:https://github.com/

    2022年9月13日
    0
  • jmeter安装及使用

    jmeter安装及使用1、下载好之后,解压到一个目录;2、配置环境变量:2.1、新建:JMETER_HOME,路径为上一步解压得到的路径:D:\software\apache-jmeter-2.92.2、CLASSPATH后面添加英文“;”,然后再添加%JMETER_HOME\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jor…

    2022年5月25日
    39
  • opencv跟踪视频上的目标(理论分析框架)

    出处:http://hi.baidu.com/icekeydnet/blog/item/965b25154a19f3dea6ef3ffe.html如前面说到的,OpenCVVS提供了6组算法的接口,分别是:前景检测、新目标检测、目标跟踪、轨迹生成、跟踪后处理、轨迹分析,除了轨迹生成用于轨迹数据的保存以外,其他5个部分都是标准的视频监控算法体系中不可或缺的部分。      OpenC

    2022年4月16日
    32

发表回复

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

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