SqlBulkCopy的缺点是什么

问题描述:

我对“用C#插入大量数据到DB中的麻烦方式”做了一些研究,然后很多人只是建议我使用SqlBulkCopy。在我尝试了之后,它真的让我感到惊讶。毫无疑问,SqlBulkCopy非常快。看起来SqlBulkCopy是插入数据(尤其是大数据)的完美方式。但是我们为什么不在任何时候都使用它。使用SqlBulkCopy有什么缺点吗?SqlBulkCopy的缺点是什么

我能想到的

两个原因:据我所知

  1. ,它仅适用于Microsoft SQL Server的
  2. 在很多正常的工作负载,你不这样做批量insert S,但偶尔insert s与select s和update s混合。微软自己声称,一个正常的insert更有效率,在SqlBulkCopy MSDN page

请注意,如果您想要SqlBulkCopy等效于普通插入,至少您必须将其传递给SqlBulkCopyOptions.CheckConstraints参数。

+0

是的,SqlBulkCopy只能用于MS SQL Server。这也只是我知道的一个缺点。有时候这不是什么大不了的事情。例如:我们的客户只使用MS SQL Server,我们只用属于System.Data.SqlClient命名空间的几个类为他们构建应用程序。 – 2009-06-12 16:56:50

+0

为什么`SqlBulkCopyOptions.CheckConstraints`默认为false? - 这是非常直观的! – 2011-12-22 12:43:25

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

虽然 - 一个巨大的缺点 - 绝对没有错误报告。例如,如果您已更新DataSet中的数据,使用适配器将其刷回DB,并且存在重要违规(或任何其他故障),则罪魁祸首DataRows将将.HasErrors设置为true,并且您可以将其添加到您的异常消息,当它被提出。

使用SqlBulkCopy,你只需得到错误的类型,就是这样。祝你好运调试它。