9

「C# を使用して巨大なデータを DB に挿入する最良の方法」について調査したところ、多くの人が SqlBulkCopy の使用を提案しました。私がそれを試した後、それは本当に私を驚かせました。間違いなく、SqlBulkCopy は非常に高速です。SqlBulkCopy は、データ (特に巨大なデータ) を挿入するのに最適な方法のようです。しかし、なぜそれを常に使用しないのですか。SqlBulkCopy を使用することの欠点はありますか?

4

2 に答える 2

13

SqlBulkCopy は Oracle v11 にも存在しますが、Oracle クライアントのインストール時に取得する Oracle .NET アセンブリによって提供されます。SqlBulkCopy クラスは、基本的に、ターゲット データベース エンジンのプロバイダーによって 1 つずつ実装されます。

ただし、大きな欠点が 1 つあります。エラー報告がまったくないことです。たとえば、DataSet 内のデータを更新し、アダプターを使用してそれを DB にフラッシュし、キー違反 (またはその他の障害) がある場合、犯人の DataRows には .HasErrors が true に設定され、次のことができます。発生したときにそれを例外メッセージに追加します。

SqlBulkCopy を使用すると、エラーの種類を取得するだけで済みます。頑張ってデバッグしてください。

于 2010-07-27T18:59:27.120 に答える
10

私が考えることができる2つの理由:

  1. 私の知る限り、これはMicrosoftSQLServerでのみ使用できます。
  2. 多くの通常のワークロードでは、バルクを実行しませんが 、 sおよびsと混合さinsertれる場合があります。Microsoft自身は、 MSDNページで、通常の方が効率的であると述べてい ます。insertselectupdateinsertSqlBulkCopy

を通常の挿入と同等にしたい場合はSqlBulkCopy、少なくともSqlBulkCopyOptions.CheckConstraintsパラメータを渡す必要があることに注意してください。

于 2009-06-12T11:38:44.533 に答える