批量将记录插入SQL Server数据库

时间:2012-01-26 22:13:35

标签: c# .net sql-server

我有一个包含大约一百万条记录的文本文件。将它们从C#插入SQL Server数据库的最佳方法是什么?

我可以使用BULK INSERT吗?

3 个答案:

答案 0 :(得分:5)

最好的方法是使用bcp utilitySSIS workflow。这些工具有一些改进,如缓存和批处理,你会错过一个天真的实现。只要SQL Server引擎本身可以访问该文件,下一个最佳选项是BULK INSERT语句。最后一个选项是SqlBulkCopy类,它允许您的应用程序读取文件,可以处理并转换它,然后将数据作为枚举器提供给SqlBulkCopy。

答案 1 :(得分:1)

我最近处理过同样的问题,我意识到它有几个解决方案。

我写了一个BatchProgram(对于批处理程序设计,请阅读 - http://msdn.microsoft.com/en-us/magazine/cc164014.aspx

您可以使用SQL Server Utilities BCP.exe或OSQL.exe或.net框架提供的SQLBulkCopy类。

我最终使用BCP(我有一个CSV文件并使用格式化文件并加载数据)和OSQL(我使用OSQL,我必须向存储过程提供文件)

我也去了.NET Process类并使用outputdatarecieved事件将BCP.exe的所有输出记录到控制台(阅读本文 - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx),这非常有效。

我也试过SQLBulkCopy类,但是如果你先将数据加载到datatable(http://msdn.microsoft.com/en-us/library/ex21zs8x.aspx),它可能会很慢,如果你使用IDataReader(http://msdn.microsoft.com/en-us/library/434atets.aspx)它可能很快。

由于我有数百万行,我尝试使用CSVReader(http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader),速度非常快。但是在数据转换方面存在太多问题,我在SQL服务器端没有太多的灵活性。

我最终使用了BCP和OSQL。

答案 2 :(得分:0)

使用C#是否需要?最快的方法是使用bcp命令行工具:http://msdn.microsoft.com/en-us/library/ms162802.aspx