私は「C#で巨大なデータをDBに挿入するための控えめな方法」についていくつかの調査を行いましたが、多くの人がSqlBulkCopyを使用して私に示唆しました。私はそれを試した後、それは本当に私を驚かせた。間違いなく、SqlBulkCopyは非常に高速です。 SqlBulkCopyはデータ(特に巨大なデータ)を挿入するのに最適な方法です。しかし、なぜ私たちはいつもそれを使用しません。 SqlBulkCopyを使用する場合の欠点はありますか?
私が考えることができる2つの理由:
insert
は行いませんが、時々のinsert
とselect
およびupdate
混在させselect
。 Microsoft自身は、 SqlBulkCopy
MSDNページで、通常のinsert
がより効率的であるとSqlBulkCopy
ます 。 SqlBulkCopy
を通常の挿入と同等にする場合は、少なくともSqlBulkCopyOptions.CheckConstraints
パラメーターを渡す必要があることにSqlBulkCopyOptions.CheckConstraints
ください。
SqlBulkCopyはOracle v11でも存在しますが、Oracle Clientのインストール時に取得するOracle .NETアセンブリによって提供されます。 SqlBulkCopyクラスは、基本的に、ターゲットデータベースエンジンのプロバイダによって1つずつ実装されます。
1つの巨大な欠点ですが、エラー報告は絶対にありません。たとえば、DataSet内のデータを更新し、アダプタを使用してDBに戻し、キー違反(またはその他の障害)が発生した場合、致命的なDataRowsは.HasErrorsをtrueに設定します。それが発生したら例外メッセージに追加してください。
SqlBulkCopyを使用すると、エラーの種類が表示されます。それだけです。幸運をデバッグする。