c datatable导入mysql_【C#常用方法】3.将DataTable一次性插入数据库表中(使用SqlBulkCopy)...

本文介绍了如何利用C#的SqlBulkCopy类高效地将DataTable数据一次性插入到数据库表中,包括方法代码实现和使用示例,强调了设置列映射的重要性。
摘要由CSDN通过智能技术生成

将DataTable一次性插入数据库表中(使用SqlBulkCopy)

1.SqlBulkCopy简介

SqlBulkCopy类是ADO.NET中专门用于数据库批量插入数据的类,其批量插入的执行速度是其他类似操作类中最快的。SqlBulkCopy类在批量插入数据时,不用去像传统插入操作那样先拼写出sql语句再对sql语句进行执行,而是可以直接将一个DataTable插入数据库的目标表中。

关于SqlBulkCopy类的用法详见下面例子2。

2.将DataTable一次性插入数据表中

(1)方法代码

直接上功能代码,代码中的注释很详细:

classDBHelper

{///

///使用sqlBulkCopy将DataTable一次性插入数据库///

/// DataTable

/// 要插入的数据库表名称

/// DataTable与数据库表中列的对应关系,key:为DataTable的列名,value:数据库表的列名

///

public static bool InsertDataTableToDB(DataTable dt, string tableName, DictionarycolMapping)

{try{string connStr = "Server=.;Database=TestDB;uid=sa;pwd=songge";//连接字符串//使用SqlBulkCopy可省略SqlConnection,直接将连接字符串赋给它(当然也可以不省略),第二个参数表示打开事物(一步操作失败那么所有操作回滚)

using (SqlBulkCopy bc = newSqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction))

{//添加DataTable每列与数据表每列的对应关系

foreach (var item incolMapping)

{

bc.ColumnMappings.Add(item.Key, item.Value);

}

bc.BatchSize= dt.Rows.Count;//设置每次插入的数据量

bc.DestinationTableName = tableName;//设置目标表(要插入到哪个数据库表)

bc.WriteToServer(dt);//执行插入

return true;

}

}catch(Exception ex)

{return false;

}

}

}

(2)使用方法

首先在数据库新建一个测试表,名称为TestTable1,表结构如下所示:

fff1e4f337b78e222dde0ca05c632bb9.png

重点解释:将一个DataTable插入数据库时,如果设置了ColumnMappings(即设置了DataTable列与数据库表列的对应关系),那么在插入时只插入绑定了的列,如果不设置ColumnMappings,那么如果想用SqlBulkCopy将DataTable插入数据库,那么这个DataTable的结构必须与数据库表的结构相同(列名相同,好像顺序与列的数量也得相同,我没测试)。

private void button_Click(objectsender, RoutedEventArgs e)

{//初始化一个要插入数据表的DataTable

DataTable dt = newDataTable();

dt.Columns.Add("a", typeof(string));

dt.Columns.Add("b", typeof(string));

dt.Columns.Add("c", typeof(int));

dt.Columns.Add("x", typeof(string));

dt.Columns.Add("Cc", typeof(string));//设置与数据库表的对应关系,因为DataTable只绑定了数据库表的三列,所以在插入时,只插入绑定的这三列

Dictionary colMapping = new Dictionary();

colMapping.Add("c", "Cf");

colMapping.Add("b", "Ca");

colMapping.Add("a", "Cb");//插入10条测试数据

for (int i=0;i<10;i++)

{

dt.Rows.Add(dt.NewRow().ItemArray= new object[] { "a", "b" , i, "x","Cc"});

}//执行方法

DBHelper.InsertDataTableToDB(dt, "TestTable1", colMapping);

}

执行结果:

c45d49c5ad28c2b53c001e9e2b6fee7f.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值