2009-04-22 7 views
1

私たちは、CLRプロシージャでメモリ内のDataTableを持っています。重要な処理の後、DataTableには、データベース内のテーブルにロードする必要がある多くのデータがあります。残念ながら、context connectionを使用しているため、SqlBulkCopyは機能しません(エラー:)。要求された操作はコンテキスト接続outline of context restrictionsで利用できません。SQL CLR SqlBulkCopy from DataTable

追加の通常の接続を構築し、それを使用してSQLBulkCopyを実行することを考えています。これは、regular connection over a context connectionを使用するオーバーヘッドを考えると、むしろばかげているようです。私たちは、DataTableの行を繰り返し処理し、それぞれのレコードを挿入することを考えましたが、サイズが大きく、SQLBulkCopyがより適しているようです。

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

答えて

2

私は、SQLBulkCopyがテーブルサイズに応じて挿入を行うよりも10-100倍高速であると見積もっています。トレードオフの価値は十分です。

DataTableで「重要な処理」を行っている間に、時間とリソースが必要なことは間違いありませんが、コンテキスト接続ではなくフル接続を使用するか、支払う小さな価格。

+0

実際には、DataTableは、重要な処理の後にレコードを格納するための便利なオブジェクトとして機能しています。つまり、未接続のDataTableをレコード挿入のためにSqlBulkCopyに送信する機能は、接続タイプで問題が発生するまで、スラムダンクと思われました。私はこれについてもっと考えているほど、私は定期的な接続を開くことはおそらく行く方法であるということに同意する傾向があります。 – ahsteele

関連する問題