ado.net mysql 批量插入_ADO.NET 批量插入

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classQueue2 {3 public Queue(string content, QueueType type, stringofficeNumber)4 {5 Content =content;6 Type =type;7 OfficeNumber =officeNumber;8 }9

10 public Queue(DateTime proccessTime, int internalNumber, string content, QueueType type, stringofficeNumber)11 {12 ProcessTime =proccessTime;13 InternalNumber =internalNumber;14 Content =content;15 Type =type;16 OfficeNumber =officeNumber;17 }18

19 ///

20 ///处理时间21 ///

22 public DateTime ProcessTime { get; set; }23 ///

24 ///内部编号25 ///

26 public int InternalNumber { get; set; }27 ///

28 ///内容29 ///

30 public string Content { get; set; }31 ///

32 ///信箱类型33 ///

34 public QueueType Type { get; set; }35 ///

36 ///代理人编号37 ///

38 public string OfficeNumber { get; set; }39

40 ///

41 ///判断给出的内容字串是否是有效的信件内容;42 ///

43 ///

44 ///

45 public static bool Validate(string queueContent, stringofficNumber)46 {47 returnqueueContent.Contains(officNumber);48 }49 }

实体

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 privateDataTable GetTableSchema()2 {3 var dataTable = newDataTable();4 dataTable.Columns.AddRange(new[]5 {6 new DataColumn("ProcessTime"),7 new DataColumn("InternalNumber"),8 new DataColumn("Content"),9 new DataColumn("Type"),10 new DataColumn("OfficeNumber"),11 });12 returndataTable;13 }

创建DataTable

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public int Add(System.Collections.Generic.Listqueues)2 {3 int rowCount = 0;4 var dataTable =GetTableSchema();5

6 foreach (var queue inqueues)7 {8 DataRow dataRow =dataTable.NewRow();9 dataRow[0] =queue.ProcessTime;10 dataRow[1] =queue.InternalNumber;11 dataRow[2] =queue.Content;12 dataRow[3] =queue.Type;13 dataRow[4] =queue.OfficeNumber;14 dataTable.Rows.Add(dataRow);15 }16

17 using (var sqlConnection = newSqlConnection(ConnectionString))18 {19 sqlConnection.Open();20 using (var sqlBulkCopy = newSqlBulkCopy(sqlConnection))21 {22 sqlBulkCopy.DestinationTableName = "History.Queues";23 sqlBulkCopy.BatchSize =dataTable.Rows.Count;24 if (sqlBulkCopy.BatchSize != 0)25 {26 sqlBulkCopy.WriteToServer(dataTable);27 rowCount =sqlBulkCopy.BatchSize;28 }29 }30 }31

32 returnrowCount;33 }

批量操作

代码分析:

var sqlBulkCopy = new SqlBulkCopy(sqlConnection)

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

sqlBulkCopy.WriteToServer(dataTable);

rowCount = sqlBulkCopy.BatchSize;

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值