繁体   English   中英

如何使用ADO.Net最好地插入350,000行

[英]How to best insert 350,000 rows with ADO.Net

我有一个350,000行的csv文件,每行有大约150列。

使用ADO.Net将这些行插入SQL Server的最佳方法是什么?

我通常这样做的方法是手动创建SQL语句。 我想知道是否有任何方法可以将其编码为简单地将整个数据表插入SQL Server? 或者像这样的捷径。

顺便说一下,我已经尝试过用SSIS做这个,但是我可以用C#处理一些数据清理问题,但SSIS不是那么容易。 数据以XML格式开头,但为了简单起见,我将其更改为CSV格式。

创建一个实现IDataReader的类“CsvDataReader”。 只需实现Read(),GetValue(int i),Dispose()和构造函数:如果需要,可以让其余的抛出NotImplementedException,因为SqlBulkCopy不会调用它们。 使用read来处理每一行的读取,使用GetValue来读取行中的第i个值。

然后将其传递给SqlBulkCopy,并使用您想要的相应列映射。

使用该方法,我获得大约30000条记录/秒插入速度。

如果您可以控制源文件格式,请将其设置为分隔符,因为它比CSV更容易解析。

编辑: http//www.codeproject.com/KB/database/CsvReader.aspx - tx Mark Gravell。

SqlBulkCopy如果可用的话。 以下是使用C#在ADO.NET 2.0中使用SqlBulkCopy的非常有用的解释

我认为您可以将XML直接加载到DataSet中,然后将SqlBulkCopy映射到数据库和DataSet。

你应该恢复到XML而不是csv,然后使用openxml将该xml文件加载到临时表中,清理临时表中的数据,然后最终处理这些数据。

我一直在使用这种方法进行大量数据导入,其中我的XML文件大小恰好大于500 MB,而openxml就像魅力一样。

与手动ado.net语句相比,您会感到惊讶的是这会更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM