1

CLR プロシージャにメモリ内 DataTable があります。重要な処理の後、DataTable には、データベース内のテーブルにロードする必要がある大量のデータが含まれています。残念ながら、コンテキスト接続を使用しているため、 SqlBulkCopy は機能しません (エラーがスローされます: The requested operation is not available on the context connection Outline of context definitions )。

追加の通常の接続を構築し、それを使用して SQLBulkCopy を実行することを考えています。これは、コンテキスト接続を介して通常の接続を使用するオーバーヘッドを考えると、かなりばかげているように思えます。DataTable の行を繰り返し処理し、それぞれにレコードを挿入することを考えましたが、サイズが非常に大きく、SQLBulkCopy の方が適しているようです。

私たちは DataTable と結婚しておらず、CLR プロシージャから膨大な量のデータをデータベースに挿入する最良の方法を探しているだけです。DataTable に関する最後の注意事項は、基になるデータベース テーブルを表していますが、DataSet または TableAdapter を介してテーブルに関連付けられていません。CLR プロシージャでこれを行う手段は、すぐにはわかりませんでした。これを行い、AcceptChanges または Update メソッドを使用することは、許容できる解決策です。

4

1 に答える 1

2

テーブルのサイズにもよりますが、SQLBulkCopy は挿入よりも 10 ~ 100 倍高速であると見積もっています。

間違いなく時間とリソースを必要とする DataTable で「重要な処理」を行っているのを見ると、コンテキスト接続の代わりに完全な接続を使用するか、まったく新しい接続を開くかのわずかな追加のオーバーヘッドは、わずかな代償です。 .

于 2009-04-22T23:05:17.953 に答える