在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便。而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据。数据源可以来自关 系数据库或者XML文件,甚至WebService返回结果。其中最重要的一个类就是SqlBulkCopy类,使用它可以很方便的帮助我们把数据源的数 据迁移到目标数据库中。

  public class Queue
{
public Queue(string content, QueueType type, string officeNumber)
{
Content = content;
Type = type;
OfficeNumber = officeNumber;
} public Queue(DateTime proccessTime, int internalNumber, string content, QueueType type, string officeNumber)
{
ProcessTime = proccessTime;
InternalNumber = internalNumber;
Content = content;
Type = type;
OfficeNumber = officeNumber;
} /// <summary>
/// 处理时间
/// </summary>
public DateTime ProcessTime { get; set; }
/// <summary>
/// 内部编号
/// </summary>
public int InternalNumber { get; set; }
/// <summary>
/// 内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 信箱类型
/// </summary>
public QueueType Type { get; set; }
/// <summary>
/// 代理人编号
/// </summary>
public string OfficeNumber { get; set; } /// <summary>
/// 判断给出的内容字串是否是有效的信件内容;
/// </summary>
/// <param name="queueContent"></param>
/// <param name="officNumber"> </param>
public static bool Validate(string queueContent, string officNumber)
{
return queueContent.Contains(officNumber);
}
}

实体

         private DataTable GetTableSchema()
{
var dataTable = new DataTable();
dataTable.Columns.AddRange(new[]
{
new DataColumn("ProcessTime"),
new DataColumn("InternalNumber"),
new DataColumn("Content"),
new DataColumn("Type"),
new DataColumn("OfficeNumber"),
});
return dataTable;
}

创建DataTable

         public int Add(System.Collections.Generic.List<Domain.Queue> queues)
{
int rowCount = ;
var dataTable = GetTableSchema(); foreach (var queue in queues)
{
DataRow dataRow = dataTable.NewRow();
dataRow[] = queue.ProcessTime;
dataRow[] = queue.InternalNumber;
dataRow[] = queue.Content;
dataRow[] = queue.Type;
dataRow[] = queue.OfficeNumber;
dataTable.Rows.Add(dataRow);
} using (var sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
using (var sqlBulkCopy = new SqlBulkCopy(sqlConnection))
{
sqlBulkCopy.DestinationTableName = "History.Queues";
sqlBulkCopy.BatchSize = dataTable.Rows.Count;
if (sqlBulkCopy.BatchSize != )
{
sqlBulkCopy.WriteToServer(dataTable);
rowCount = sqlBulkCopy.BatchSize;
}
}
} return rowCount;
}

批量操作

代码分析:

  var sqlBulkCopy = new SqlBulkCopy(sqlConnection)

先生成SqlBulkCopy 实例,构造函数指定了目标数据库,使用sqlConnection链接创建

  sqlBulkCopy.WriteToServer(dataTable);

      rowCount = sqlBulkCopy.BatchSize;

  rowCount  属性指定通知通知事件前处理的数据行数

  WriteToServer方法就是将数据源拷备到目标数据库。在使用WriteToServer方法之前必须先指定 DestinationTableName属性,也就是目标数据库的表名,

ADO.NET 批量插入的更多相关文章

  1. Entity Framework与ADO.NET批量插入数据性能测试

    Entity Framework是.NET平台下的一种简单易用的ORM框架,它既便于Domain Model和持久层的OO设计,也提高了代码的可维护性.但在使用中发现,有几类业务场景是EF不太擅长的, ...

  2. 传智播客--ADO.net--SqlBulkCopy批量插入数据(小白必知)

    一般情况下,我们在向数据库中插入数据时用Insert语句,但是当数据量很大的时候,这种情况就比较缓慢了,这个时候就需要SqlBulkCopy这个类. SqlBulkCopy本身常用的函数有这么几个 D ...

  3. ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)

    转自:http://blog.csdn.net/huaer1011/article/details/2312361 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还 ...

  4. 【ADO.NET-中级】百万级数据的批量插入的两种方法测试

    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量 ...

  5. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  6. C#批量插入数据到Sqlserver中的三种方式

    本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...

  7. C#_批量插入数据到Sqlserver中的四种方式

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  8. IBatis.Net 批量插入数据

    利用了iterate标签来做的: 先看iterate标签几个属性的: prepend-加在open指定的符号之前的符号,添加在语句的前面(可选) property-类型为ArrayList的用于遍历的 ...

  9. 使用EF扩展EntityFramework.BulkInsert实现批量插入

    EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而EntityFramework.BulkInsert则是利 ...

随机推荐

  1. selenium python 启动Firefox

    我的火狐浏览器版本是最新的: 下载geckodrive:https://github.com/mozilla/geckodriver/releases/ 下载完后将exe文件放到这里“D:\firef ...

  2. [LeetCode] 237. Delete Node in a Linked List_Easy tag: Linked List

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  3. jmeter 线程组之间的参数传递(加密接口测试三)

    场景测试中,一次登录后做多个接口的操作,然后登录后的uid需要关联传递给其他接口发送请求的时候使用. 1.在登录接口响应信息中提取uid字段值 1>login请求 -->添加 --> ...

  4. BCB ERROR:[Linker Error] 'XXX.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

    今天C++builder 导入 gts .lib  (gts.dll)库文件 编译报错: [Linker Error] 'D:\...\V4.05.007.1000-20161028\GTS.LIB' ...

  5. SQL Server报“GUID应包含带4个短划线的32位数”

    转自:http://www.seayee.net/article/info_106.html 最近在配置一台服务器的MS SQL Server 2005的维护计划自动备份数据库,能创建维护计划,但设置 ...

  6. 持续集成之二:搭建SVN服务器(subversion)

    安装环境 Red Hat Enterprise Linux Server release 7.3 (Maipo) jdk1.7.0_80 subversion-1.10.3.tar.gz apr-1. ...

  7. 安装vscode with springboot

    1.安装jdk8 2.下载vscode,一切按照默认配置完成安装.下载地址:https://code.visualstudio.com 3.安装完成后,运行vscode.如果没有任何反应,在命令行上运 ...

  8. 20145316许心远《网络对抗》MSF基础应用

    20145316许心远<网络对抗>MSF基础应用 实验后回答问题 用自己的话解释什么是exploit,payload,encode. exploit:顾名思义就是攻击嘛,因为是个动词,所以 ...

  9. Oracle和sql server中复制表结构和表数据的sql语句

    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...

  10. SQL学习之简单增删改查

    SQL最常用的语句,就是增删改查: 增删改查的对象,分别是库(文件夹),表(文件),表的内容(表的记录): 一.创建一个基本的表 #create table Student_Info (Name VA ...