私は「C#で巨大なデータをDBに挿入するための控えめな方法」についていくつかの調査を行いましたが、多くの人がSqlBulkCopyを使用して私に提案しました。私はそれを試した後、それは本当に私を驚かせた。間違いなく、SqlBulkCopyは非常に高速です。 SqlBulkCopyはデータ(特に巨大なデータ)を挿入するのに最適な方法です。しかし、なぜ私たちはいつもそれを使用しません。 SqlBulkCopyを使用する場合の欠点はありますか?私は考えることができるSqlBulkCopyの欠点は何ですか
答えて
つの理由:私の知る限りでは
- が、それは、あなたがバルク
insert
秒をしない、通常のワークロードの多くでは、マイクロソフトのSQL Serverの - でのみ使用可能ですが、ときどきが
select
sとupdate
sと混在しています。マイクロソフト自身は、SqlBulkCopy
MSDN pageでは、通常のinsert
がそれより効率的だと述べています。
あなたはSqlBulkCopy
は、通常の挿入と同等になりたい場合は、非常に少なくとも、あなたはそれをSqlBulkCopyOptions.CheckConstraints
パラメータを渡す必要がありますので注意してください。
Oracle v11でもSqlBulkCopyは存在しますが、Oracle Clientのインストール時に取得するOracle .NETアセンブリによって提供されます。 SqlBulkCopyクラスは、基本的に、ターゲットデータベースエンジンのプロバイダによって1つずつ実装されます。
1つの大きな欠点ですが、エラー報告は絶対にありません。たとえば、DataSet内のデータを更新し、アダプタを使用してDBに戻し、キー違反(またはその他の障害)が発生した場合、致命的なDataRowsは.HasErrorsをtrueに設定します。それが発生したら例外メッセージに追加してください。
SqlBulkCopyを使用すると、エラーの種類が表示されます。それだけです。幸運をデバッグする。
+1デバッグが完全に同意していますBulkCopyの問題私が持っている1つのアプローチは、失敗したBulkCopyコマンドを「分解」し、finallyブロックに行ごとに挿入することです。そうすれば、エラー報告の一環として問題のあるDataRowを特定できます。 – Totero
私は、エラー報告のために、個々の失敗を取り戻す方法があるが、1レコードのページで一括コピーを再送信し、すべての例外を捕まえて(犯行行とともに)投げ込むことを理解した。それは最も効率的ではありませんが、エラーが発生した場合にのみ発生しますので、それほど悪くはありません。完全な記事はここを参照してください:http://www.codeproject.com/Articles/387465/Retrieving-failed-records-after-an-SqlBulkCopy-exc –
- 1. Nginxの画像キャッシュの欠点と欠点は何ですか?
- 2. シングルトンクォーツジョブの欠点は何ですか
- 3. ファサードデザインパターンの欠点は何ですか?
- 4. Stackless Pythonの欠点は何ですか?
- 5. DWRの欠点は何ですか?
- 6. 「網膜」のこのCSSスプライトソリューションの欠点は何ですか?
- 7. Silverlight 4のビットマップキャッシュの欠点は何ですか?
- 8. ランポートの事前発生アルゴリズムの欠点は何ですか?
- 9. LOGOを使用する際の欠点/弱点は何ですか?
- 10. SEAMには何らかの欠点がありますか?
- 11. スクリプトでphp.ini変数を設定することの欠点は何ですか?
- 12. IDで直接DOM要素にアクセスする際の欠点は何ですか?
- 13. SQL Serverでリンクサーバーを使用する際の欠点は何ですか?
- 14. この拡張メソッドを定義する際の欠点は何ですか?
- 15. linqの欠点
- 16. 組み込みのBinaryFormatterベースの.Netシリアル化の欠点は何ですか?
- 17. 汎用データ型表現としてのリストの欠点は何ですか?
- 18. 各Webサイトを独自のAppPoolで実行する利点と欠点は何ですか?
- 19. チェインセッター:欠点はありますか?
- 20. Drupalを使用する際の最大の欠点と利点は何ですか?
- 21. CRUDパターンの欠点
- 22. Context.Currentパターンの欠点?
- 23. Tomcatの欠点Http11NioProtocol
- 24. gwt + grail ..利点と欠点
- 25. Android NDKの利点と欠点
- 26. ActiveMQのNIOの欠点
- 27. MonoTouchの最大の欠点
- 28. Silverlightでhtmlとは対照的に銀河でビジネスアプリケーションを構築する際の欠点は何ですか
- 29. 3Dの円の最も近い点。何が欠けている?
- 30. wordpressの欠点/制限?
はい、SqlBulkCopyはMS SQL Serverでのみ使用できます。これは私が知っている欠点の1つに過ぎません。いつかそれは本当に大きな問題ではありません。たとえば、お客様はMS SQL Serverのみを使用し、System.Data.SqlClient名前空間に属するいくつかのクラスを使用してアプリケーションを構築します。 –
デフォルトで 'SqlBulkCopyOptions.CheckConstraints'がfalseになるのはなぜですか? - それは直感に反している! –
@BarryKaye:いいえ、そうではありません。名前は '一括コピー'なので、制約が既に正しいと分かっているデータをコピーする必要があります。そうでなければ、あなたが何をしているのか分かりません:) –