我为“使用C#将大量数据插入数据库的最佳方法”做了一些研究,很多人建议我使用SqlBulkCopy。我试用了一下,真的非常快。毫无疑问,SqlBulkCopy是一个完美的插入数据(特别是大量数据)的方式。但是,为什么我们不总是使用它呢?使用SqlBulkCopy有什么缺点吗?
我为“使用C#将大量数据插入数据库的最佳方法”做了一些研究,很多人建议我使用SqlBulkCopy。我试用了一下,真的非常快。毫无疑问,SqlBulkCopy是一个完美的插入数据(特别是大量数据)的方式。但是,为什么我们不总是使用它呢?使用SqlBulkCopy有什么缺点吗?
SqlBulkCopy也适用于Oracle v11,但是必须在安装Oracle Client时获取Oracle.NET程序集以提供支持。 SqlBulkCopy类基本上是由目标数据库引擎的提供者单独实现的。
然而,有一个巨大的缺点 - 它绝对没有错误报告。例如,如果您已经使用DataAdapter更新了DataSet中的数据,并将其刷新回数据库,但存在关键冲突(或任何其他故障),那么罪魁祸首的DataRow将会被设置为.HasErrors为true,当它被抛出时,您可以将其添加到异常消息中。
使用SqlBulkCopy时,您只能获得错误类型,仅此而已。祝您调试好运。
我可以想到两个原因:
SqlBulkCopy
MSDN页面上有说明。请注意,如果您希望SqlBulkCopy
等效于普通插入,至少需要向其传递SqlBulkCopyOptions.CheckConstraints
参数。
SqlBulkCopyOptions.CheckConstraints
默认为 false?这太不符合直觉了! - Barry Kaye