在C#中,我们可以使用sqlBulkCopy去批量插入数据,其他批量插入方法不在讨论。

  1. 1 /// <summary>
  2. 2 /// SqlBulkCopy批量插入数据
  3. 3 /// </summary>
  4. 4 /// <param name="connectionStr">链接字符串</param>
  5. 5 /// <param name="dataTableName">表名</param>
  6. 6 /// <param name="sourceDataTable">数据源</param>
  7. 7 /// <param name="batchSize">一次事务插入的行数</param>
  8. 8 public static void SqlBulkCopyByDataTable(string connectionStr, string dataTableName, DataTable sourceDataTable, int batchSize = 100000)
  9. 9 {
  10. 10 using (SqlConnection connection=new SqlConnection(connectionStr))
  11. 11 {
  12. 12 using (SqlBulkCopy sqlBulkCopy=new SqlBulkCopy(connectionStr,SqlBulkCopyOptions.UseInternalTransaction))
  13. 13 {
  14. 14 try
  15. 15 {
  16. 16 sqlBulkCopy.DestinationTableName = dataTableName;
  17. 17 sqlBulkCopy.BatchSize = batchSize;
  18. 18 for (int i = 0; i < sourceDataTable.Columns.Count; i++)
  19. 19 {
  20. 20 sqlBulkCopy.ColumnMappings.Add(sourceDataTable.Columns[i].ColumnName,sourceDataTable.Columns[i].ColumnName);
  21. 21 }
  22. 22 sqlBulkCopy.WriteToServer(sourceDataTable);
  23. 23 }
  24. 24 catch (Exception ex)
  25. 25 {
  26. 26
  27. 27 throw ex;
  28. 28 }
  29. 29 }
  30. 30 }
  31. 31 }

使用方式如下,这里我将插入100万条数据,

  在SqlBulkCopyByDataTable方法中每次插入10万条,

  其插入方式SqlBulkCopyOptions.UseInternalTransaction (即事务插入,可用其他方式。)

  1. 1 DataTable dt = new DataTable("测试");
  2. 2 dt.Columns.Add("ID",typeof(int));
  3. 3 dt.Columns.Add("Name", typeof(string));
  4. 4 dt.Columns.Add("Age", typeof(int));
  5. 5 for (int i = 1; i <= 1000000; i++)
  6. 6 {
  7. 7 DataRow row = dt.NewRow();
  8. 8 row["ID"] = i;
  9. 9 row["Name"] = "名字"+i;
  10. 10 row["Age"] = i;
  11. 11 dt.Rows.Add(row);
  12. 12 }
  13. 13
  14. 14 string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
  15. 15
  16. 16 Stopwatch stopWatch = new Stopwatch();
  17. 17 stopWatch.Start();
  18. 18
  19. 19
  20. 20 SqlBulkCopyByDataTable(connStr, "T_Demo", dt);
  21. 21
  22. 22 Console.WriteLine(stopWatch.Elapsed);
  23. 23 Console.ReadKey();

耗时为如下。

C#中的SqlBulkCopy批量插入数据的更多相关文章

  1. sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )

    通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...

  2. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...

  3. 用SqlBulkCopy批量插入数据到SqlServer数据库表中

    首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...

  4. 使用 SqlBulkCopy 批量插入数据

    /// <summary> /// 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// </summary> /// <param name= ...

  5. MSSQL使用sqlbulkcopy批量插入数据

    具体代码如下: /// <summary> /// 批量插入数据到BayonetZipFailedPic表 /// </summary> /// <param name= ...

  6. sqlbulkcopy 批量插入数据

    批量插入 Datetable数据  通过sqlbulkcopy 插入1百万条数据 用时 10秒钟 (有兴趣的小伙伴可以去测试) /// <summary> /// /// </sum ...

  7. c# sqlbulkcopy批量插入数据

    dt信息中包含数据和表名 public static void SqlBulkInsert(DataTable dt, string connStr) { try { using (var conn ...

  8. 使用事务和SqlBulkCopy批量插入数据

    SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据有效批量的加载到SQL Server表中的功能 ...

  9. C#使用SqlTransaction事务回滚与SqlBulkCopy批量插入数据

    C#中批量处理数据,有时候因为一条记录导致整个批量处理失败.这时候肯能会导致数据不全等问题,这时候我们可以使用SqlTransaction来进行事务回滚,即是要么全部成功要么全部不成功.如下代码 // ...

随机推荐

  1. spring boot 在框架中注入properties文件里的值(Spring三)

    前一篇博客实现了打开第一个页面 链接:https://blog.csdn.net/qq_38175040/article/details/105709758 本篇博客实现在框架中注入propertie ...

  2. selenium中各个模块操作:下拉框、鼠标悬浮连贯、拼图拖拽操作、以及其他拖拽操作、连线操作

    1.下拉框的修改操作 方法一:定位到元素后,通过select选择对应的值 方法二:通过两次点击的方法:没有select的value属性时,采用click两次的方法去选择: click第一次后,出现下拉 ...

  3. oracle之通过group by产生统计报告

    通过group by产生统计报告 Oracle数据库中的ROLLUP配合group by命令使用,可以提供信息汇总功能(与"小计"相似)CUBE,也是GROUP BY子句的一种扩展 ...

  4. Java源码之HashMap的hash篇

    提到哈希,我们脑袋中立马就会闪过一个方法,就是hashCode(),没错.就是这个! 我们知道HashMap是通过 数组+链表 的结构进行数据存储的,有数组就会有索引,而HashMap内的数据要存储在 ...

  5. 【vue】---- 新版脚手架搭建项目流程详解

    一.概述 本文将介绍vue项目完整的搭建流程,在使用新版本的脚手架基础上,进行了一系列的完善和配置.主要内容如下: 1.项目初始化 安装脚手架 创建项目 项目结构 2.项目搭建配置 引入第三方插件 路 ...

  6. spring:bean的生命周期

    1.spring中bean的生命周期 (1)概念 在spring框架中,所有的bean对象都有生命周期,就是指bean的创建.初始化.服务.销毁的一个过程. (2)bean的生命周期 bean的定义 ...

  7. Gitlab集成Sonarqube自动检测代码并发送报告给提交者

    使用gitlab-ci.sonarqube.sonar-scanner 实现如下功能 1.一旦提交代码就进行代码质量检测 2. 发送检测报告邮件给提交者 先来看下最终结果,邮件中有检测报告,具体bug ...

  8. 依赖注入在 dotnet core 中实现与使用:4. 集成 Autofac

    本示例使用 .net core 5 rc-1 实现. 1. 添加 Nuget 包引用 使用 Autofac 当然要添加 Autofac 的 Nuget 包,主要涉及到两个: Autofac.Exten ...

  9. Mbedtls和Opesnssl 解码x509Certificate

    最近项目需要添加解码x509Certificate功能,可以使用openssl或者mbedtls库.对这两个库的使用总结一下. 一 Openssl解码x509 Certificate 1. 初始化   ...

  10. Asp.Net Core 企业微信静默授权

    企业微信接口文档 1.构造授权网页链接 2.回调获取到 Code 通过code+access_token去请求用户信息 3.获取access_token 调试准备工作 -->内网穿透+域名 推荐 ...