SqlBulkCopy类是System.Data.SqlClient下的类,我们开发中不常用,甚至不知道有这么一个类的存在,但确实比sql插入,事务批量插入,sql批量拼接插入快很多,比调用存储过程插入方便

下面是它的用法:

public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize)

{

  • int count = dt.Rows.Count;
  • string tableName = "TestTable";
  • int copyTimeout = 600;
  • bool flag = false;
  • try
  • {
  • using (SqlConnection cn = new SqlConnection(connectionString))
  • {
  • using (TransactionScope scope = new TransactionScope())
  • {
  • cn.Open();
  • using (SqlBulkCopy sbc = new SqlBulkCopy(cn))
  • {
  • //服务器上目标表的名称
  • sbc.DestinationTableName = tableName;
  • sbc.BatchSize = batchSize;
  • sbc.BulkCopyTimeout = copyTimeout;
  • for (int i = 0; i < dt.Columns.Count; i++)
  • {
  • //列映射定义数据源中的列和目标表中的列之间的关系
  • sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
  • }
  • sbc.WriteToServer(dt);
  • flag = true;
  • scope.Complete();//有效的事务
  • }
  • }
  • }
  • }
  • catch (Exception ex)
  • {
  • LogHelper.Error(ex.Message);
  • return false;
  • }
  • return flag;
  • }

SqlBulkCopy原理是采用了SQL Server的BCP协议进行数据的批量复制,结合使用事务,就我们的案例而言,大约每批800条是平衡点,性能比逐条插入提高了100多倍,并比同样使用事务批量插入的案例性能提升了7倍以上

这里是来源作者实验的链接:http://blog.csdn.net/amandag/article/details/6393717

大数据批量插入数据库使用(SqlBulkCopy )效率更高的更多相关文章

  1. c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...

  2. C#:几种数据库的大数据批量插入 - faib

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  3. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...

  4. list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库

    /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...

  5. 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】

    多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...

  6. C#中几种数据库的大数据批量插入

    C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插 ...

  7. C#:几种数据库的大数据批量插入

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  8. C#:几种数据库的大数据批量插入(转)

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解 ...

  9. PHP如何将多维数组中的数据批量插入数据库?

    PHP将多维数组中的数据批量插入到数据库中,顾名思义,需要用循环来插入. 1.循环insert into 语句,逐渐查询 <?php /* www.qSyz.net */ @mysql_conn ...

随机推荐

  1. R----lubridata包介绍学习

    lubridate包,非常强大,能够识别各种类型的日期.字符型和时间型数据,都是格式比较特别的你数据,在处理时,比较麻烦,但是有了lubridate这个包之后,时间处理变得非常简单,这个包函数命名简单 ...

  2. ShareSDK第三方登录代码

    - (IBAction)YYSJBut:(UIButton *)sender{    if (sender.tag == 7)    {        [self AuthLogin:SSDKPlat ...

  3. 招聘一个靠谱的 iOS

    近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受.经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了.总结下面试人过程中的感受,你也可 ...

  4. Java开发中经典的小实例-(字符串比较)

    //输入字符串然后与自己定义的数组进行对比,并输出重复次数. public class Test11 {    public static void main(String[] args) {     ...

  5. <!DOCTYPE> DTD基础

    1.什么是DTD? DTD(Document Type Definition)是文档类型定义. 2.DTD有什么用? 约定文档格式,规定元素,元素属性,元素关系,标签,实体等. 3.DTD分类 DTD ...

  6. android,NDK android.mk相关

    1.c++ try...catch的支持 需要在Android.mk 中添加 LOCAL_CPPFLAGS += -fexceptions,或者在Application.mk中添加APP_CPPFLA ...

  7. t检验

    例子:以往通过大规模调查已知某地新生儿出生体重为3.30kg.从该地难产儿中随机抽取35名新生儿作为研究样本,平均出生体重为3.42kg,标准差为0.40kg. 问该地难产儿出生体重是否与一般新生儿体 ...

  8. Python之路 day1 用户登录多次被锁定

    编写登陆接口: 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 #Author:ersa import getpass,os,sys #读取账户信息到内存中 try: accounts_fil ...

  9. SSH框架流程详解

    解图: 由图可见,有三个框架{ ①. Struts_2 ②. Spring ③. Hibernate } 框架 作用 本质 同等于 Struts_2 实现MVC / 控制.跳转 过滤器(Filter) ...

  10. C关键字

    1 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义