大数据批量插入数据库使用(SqlBulkCopy )效率更高

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

时间: 2024-10-05 16:58:59

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

大数据批量插入数据库

public void ExecuteBuklCopy(DataTable dt) { SqlConnection conn = new SqlConnection(connectionString ); if (dt == null || dt.Rows.Count <= 0 || String.IsNullOrEmpty ( dt.TableName ) ) { return; } if (conn.State != ConnectionState.Open) { conn.Open();

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

C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider.批量插入的实现可以通过实现该接口来实现. /// <summary> /// 提供数据批量处理的方法. /// </summary> public interface IBatcherProvider : IProviderServic

几种数据库的大数据批量插入

IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了. /// <summary> /// 提供数据批量处理的方法. /// </summary> public interface IBatcherProvider : IProviderService { /// <summary> /// 将 <see cref="DataTable"/> 的数据批量插入到数据库中.

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

在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法. 首先说一下,IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了. /// <summary> /// 提供数据批量处理的方法. /// </summary> public interface IBatch

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致. /// </summary> /// <param name="conStr">数据库连接串</param> /// <param name="strTableName">数据库中对应的表名</param> //

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

转载:http://www.cnblogs.com/luluping/archive/2012/08/09/2629515.html 在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法. 首先说一下,IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了. /// <summ

几种数据库的大数据批量插入【转】

在之前只知道SqlServer支持数据批量插入,殊不知道Oracle.SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法. 首先说一下,IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了. /// <summary> /// 提供数据批量处理的方法. /// </summary> public interface IBatch

java,大数据批量插入、更新

public void exec(Connection conn){ try { conn.setAutoCommit(false); Long beginTime = System.currentTimeMillis(); //构造预处理statement PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)"); //1万次循环 for(int i=1;i<=100000;i+

C# 将DataTable表中的数据批量插入到数据库表中的方法

C#中有时候需要将内存中的数据批量插入到数据库表中,使用for循环进行批量插入不但耗时而且会频繁操作数据库. 针对数据量很少的可以使用for循环插入,但是针对于数据量大的则不推荐使用for循环插入,推荐使用sql的块处理插入. 块处理不但耗时少而且不会频繁对数据库进行操作,只是需要注意的一点是DataTable中的列必须与表的列完全一致. 如下代码是批量插入的一个函数,自测可用. 1 #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 2 /// <summa