ado.net mysql 批量插入_ADO.net--SqlBulkCopy批量插入数据

本文介绍了如何使用ADO.NET的SqlBulkCopy类实现高效批量插入数据到MySQL数据库。通过创建本地DataTable,读取文本文件,然后设置字段映射,最终一次性将数据写入服务器表,实现在约6秒内导入258113条记录的快速操作。
摘要由CSDN通过智能技术生成

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

SqlBulkCopy本身常用的函数有这么几个

DestinationTableName-----服务器目标表上的名称,也就是你要向哪个表插入大量的数据,这个就设置为那个表名

ColumnMappings-----字段映射,因为是要在本地建立一个Table,然后将整个Table一次性的加入到数据库中,因此需要将本地的Table的字段和数据库表中的字段做好映射关系

WriteToServer-----这个就是写入数据库了,不需要多说

导入的数据是传智播客免费视频上提供的手机号码归属地的信息,插入数据库看了一下,一共有258113条数据,用时大概6秒吧。

b8f2368b51eafb6e1914d04d960efad4.png

private void btnDR_Click(object sender, RoutedEventArgs e)

{

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = "文本文件|*.txt";

if(ofd.ShowDialog()!=true)

{

return;

}

DateTime time = DateTime.Now;//计时,看看花了多长时间

DataTable table = new DataTable();//本地创建一个临时表

//给临时表添加列名

table.Columns.Add("HD");

table.Columns.Add("DQ");

table.Columns.Add("LX");

using(StreamReader streamReader=new StreamReader(ofd.FileName,Encoding.Default))//读取文件

{

while(!streamReader.EndOfStream)

{

string[] stringStream = streamReader.ReadLine().Split('\t');//按行读取,通过\t进行分割,得到数组

string HD = stringStream[0].Trim('"');

string DQ = stringStream[1].Trim('"');

string LX = stringStream[2].Trim('"');

//将数据插入到本地创建的临时表里

DataRow row = table.NewRow();

row["HD"] = HD;

row["DQ"] = DQ;

row["LX"] = LX;

table.Rows.Add(row);

}

}

//这部分就是从本地导入到数据库中

using(SqlConnection conn=new SqlConnection("Data Source=.;Initial Catalog=imageprocess;Integrated Security=True"))

{

conn.Open();

using(SqlBulkCopy bulkCopy=new SqlBulkCopy(conn))

{

bulkCopy.DestinationTableName = "T_HM";

bulkCopy.ColumnMappings.Add("HD", "HD");//前面的参数是本地的临时Table列名,后面的参数是数据库的列名。两个名称不需要相同,我写相同,是为了方便

bulkCopy.ColumnMappings.Add("DQ", "DQ");

bulkCopy.ColumnMappings.Add("LX", "LX");

bulkCopy.WriteToServer(table);

}

}

TimeSpan TS = DateTime.Now - time;

MessageBox.Show(TS.ToString());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值