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

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

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

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

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

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

    1. 打印等边三角形 document.writeln("打印三角形</br>"); for(var i=0;i<5;i++){ for(var j=5;j> ...

  2. python判断链表是否有环

    思路:使用快慢指针,快指针每次走两步,慢指针每次走一步,如果有环,则一定会快慢指针指向同一结点: 假设环的长度为n,先让一个指针走n步,另一个再开始走,当他们指针指向同一结点时,该结点就是环入口点 ( ...

  3. c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot

    c/c++ 实现三角函数(不使用库函数) sin/cos/tan/cot #include <iostream> #include <cstdlib> #include < ...

  4. 每天一个dos命令-net.

    Rem:关于net命令相关的常用实例(如果cmd中执行net相关命令,报错:Access is denied. 可以右键cmd,以管理员身份运行即可!) 1.创建一个新账号:net user ifsf ...

  5. JSTL1.1函数标签库(functions)

    JSTL1.1函数标签库(functions) 在jstl中的fn标签也是我们在网页设计中经常要用到的很关键的标签,在使用的时候要先加上头 <%@ taglib uri="http:/ ...

  6. Python-获取等差数列

    获取等差数列思路 1. 通过range步长 2. 通过切片步长 # 通过 range series = [i for i in range(1, 101, 2)] print(series) # 通过 ...

  7. sqlserver和oracle修改表结构

    sqlserver和oracle修改表结构常用SQL Server:1.增加列  ALTER TABLE users ADD address varchar(30);2.删除列  ALTER TABL ...

  8. Linux中的硬链接和软连接

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...

  9. 098 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 02 编写并测试Subject类

    098 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 02 编写并测试Subject类 本文知识点:编写并测试Subject类 说明: ...

  10. frp内网穿透

    原理 frp(fast reverse proxy)分为Server端和Client端,Server端安装在带有公网IP的服务器上,Client安装在内网环境但能上网的普通PC中. 流程: Serve ...