9

我已经对“使用 C# 将大量数据插入 DB 的最佳方法”进行了一些研究,然后很多人只是建议我使用 SqlBulkCopy。试了之后,真的让我大吃一惊。毫无疑问,SqlBulkCopy 非常非常快。看来 SqlBulkCopy 是插入数据(尤其是大数据)的完美方式。但是我们为什么不一直使用它。使用 SqlBulkCopy 有什么缺点吗?

4

2 回答 2

13

Oracle v11 也确实存在 SqlBulkCopy,但它是由您在安装 Oracle 客户端时获得的 Oracle .NET 程序集提供的。SqlBulkCopy 类基本上是由目标数据库引擎的提供者一一实现的。

但是,一个巨大的缺点 - 绝对没有错误报告。例如,如果您更新了 DataSet 中的数据,正在使用适配器将其刷新回 DB,并且存在密钥冲突(或任何其他故障),则罪魁祸首 DataRows 将 .HasErrors 设置为 true,您可以在引发异常消息时将其添加到您的异常消息中。

使用 SqlBulkCopy,您只需获取错误的类型即可。祝你调试好运。

于 2010-07-27T18:59:27.120 回答
10

我能想到的两个原因:

  1. 据我所知,它仅适用于 Microsoft SQL Server
  2. 在很多正常的工作负载中,你不做bulk insert,而是偶尔insert混杂selects和updates。微软自己在MSDN 页面上声明,正常insert情况下更有效 。SqlBulkCopy

请注意,如果您希望 aSqlBulkCopy等效于普通插入,至少您必须将SqlBulkCopyOptions.CheckConstraints参数传递给它。

于 2009-06-12T11:38:44.533 回答