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


相关推荐

  • jsp显示时间的代码_空调代码大全

    jsp显示时间的代码_空调代码大全请参照以下的原代码,注意:下面的JavaScript码可以放置于想要显示时间的任意位置。以下是网页源代码您在本站逗留了varsec=0;varmin=0;varhou=0;flag=0;idt=window.setTimeout(“update();”,1000);functionupdate(){sec++;if(sec==60){sec=0;min+=1;}if(min

    2022年8月30日
    0
  • 移动终端处理器构成和基带芯片概述「建议收藏」

    移动终端处理器构成和基带芯片概述

    2022年1月28日
    65
  • WinForm学习

    WinForm学习C#学习

    2022年10月7日
    0
  • Android StrictMode 详解

    Android StrictMode 详解Android2.3提供一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。它将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例(policyviolation),将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。可以强制用警告代替崩溃(crash),也可以仅将警告计入日志,让你的应用继续执行St

    2022年6月1日
    36
  • int、long、long long取值范围

    int、long、long long取值范围unsignedint0~4294967295int-2147483648~2147483647unsignedlong0~4294967295long-2147483648~2147483647longlong的最大值:9223372036854775807longlong的最小值:-9223372036854775808unsigned…

    2022年6月6日
    39
  • yuv444 yuv420_硬盘转速和缓存哪个重要

    yuv444 yuv420_硬盘转速和缓存哪个重要YUV420与YUV444互转,YUV420与YUV444读取和保存,YUV的显示和播放功能【尊重原创,转载请注明出处】:https://blog.csdn.net/guyuealian/article/details/82454945  OpenCV提供了RGB与YUV420/YUV444互转的接口:cvtColor(),但根尴尬OpenCV就是没有提供YUV444与YUV420互转…

    2022年10月27日
    0

发表回复

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

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