SqlBulkCopy c# 导入大数据方法分享


摘要:
下文讲述SqlBulkCopy批量导入大数据的方法分享,如下所示:


在C#中通常导入数据时,我们可以采用ado.net 或其它orm框架对数据进行逐条导入,当数据多达上万或者十几万条时,此时我们如果逐条导入时,将会非常的耗时和慢。C#提供了一个可以快速批量导入数据的类”SqlBulkCopy”,下文讲述使用SqlBulkCopy的注意事项,如下所示:

1.大小写注意事项

在数据导入的时候,DataSet中字段名必须和数据库中表的字段名称大小写一致,否则会产生相应的错误信息



2.字段长度

当目标表中的字段长度小于源表中的字段长度时,当源表中的数据的实际长度超过目标表中的字段长度时,目标表的字段长度会发生相应的变化。



3.导入超时注意事项

当SqlBulkCopy批量导入大数据时,可能会出现”在操作完成之前超时时间已过或服务器未响应”异常信息,此时我们可以通过设置
的值,

//例设置导入超时时间为100秒
SqlBulkCopy.BulkCopyTimeout = 100 ;

缺省值为30秒。



4.数据分批导入

当数据量非常大时,我们可以设置 batchsize ,使SqlBulkCopy分批依次导入数据

SqlBulkCopy.BatchSize =0 ;
//缺省值为0 代表一次将源表数据全部导入目标表

/*
例:
当系统存在8万条记录,预计需要8分钟才能导入完毕
*/
当我们把 SqlBulkCopy.BatchSize 设置为 1万 timeout 设置为8分钟,
按照分批导入的规则,需要每一分钟导入1万条数据,否则将会出现导入超时的提示信息



5.数据导入事件

通过添加 SqlRowsCopied 事件,监控导入指定数据后,输出相应的信息

sqlbulkcopy.NotifyAfter = 8000; //每8千条事件触发一次
sqlbulkcopy.SqlRowsCopied += new SqlRowsCopiedEventHandler((object sender,SqlRowsCopiedEventArgs e) =>
{
Console.Write("已导入完毕八千条数据!");
});