【问题标题】:Bulk insert records into SQL Server database将记录批量插入 SQL Server 数据库
【发布时间】:2012-01-26 22:13:34
【问题描述】:

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

我可以使用BULK INSERT吗?

【问题讨论】:

    标签: c# .net sql-server


    【解决方案1】:

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

    【讨论】:

    • 我使用过 SqlBulkCopy 但问题是我如何知道使用 SqlBulkCopy.WriteToServer() 函数插入的总行数??
    • 只是出于好奇,为什么要将SqlBulkCopy 放在其他选项后面?
    【解决方案2】:

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

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

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

    我最终使用了 BCP(我得到了一个 CSV 文件并使用了一个格式化文件并加载了数据)和 OSQL(我使用了 OSQL,我必须向存储的 proc 提供一个文件)

    我还去了 .NET Process 类并使用 outputdatarecieved 事件将 BCP.exe 的所有输出记录到控制台中(阅读此 - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx)这工作得很好。

    我也尝试了 SQLBulkCopy 类,但是如果您首先将数据加载到数据表 (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。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 感谢 Chris Shain,我想使用 c#,因为这将成为用 C# 编写的应用程序的一部分
      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多