2009-05-22 7 views
1

私は問題があります。私はインターネット上で答えを探していますが、何も見つけられません。ウェブサービスでSQLデータベーステーブルを更新する

私はウェブサービスを吸う小さなアプリを持っています。次に、このWebサービスの結果を別のアプリケーションに渡し、独自のWebサービスを介して要求をテーブルに格納します。

私がしようとしているのは、データセットから結果をテーブルにすばやくインポートすることです。

オプション1は、データセットのすべての行をループし、それぞれに挿入を使用することです。この問題は、それが遅く、小さなアプリケーションのWebサービスの応答が遅くなることがあります。

オプション2は、データセットをSQLに一括アップロードすることです。私にとって悪い知らせは、これをどうやって行うのか分からないことです!誰も助けることができますか?

答えて

2

SqlBulkCopyを使用できます。あなたはまた、BatchSizeプロパティを設定することもできます大量のデータを処理している場合は

DataTable dtMyData = ... retrieve records from WebService 
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString)) { 
    bulkCopy.BulkCopyTimeout = 120; // timeout in seconds, default is 30 
    bulkCopy.DestinationTableName = "MyTable"; 
    bulkCopy.WriteToServer(dtMyData); 
} 

:シンプルSqlBulkCopyは、次のようになります。

+0

片面メモ - SQL Serverにターゲットテーブル "MyTable"が存在する必要があります。作成しません。 –

+0

良い点。また、テーブルが返されるWebサービスデータと正確に対応していることも前提としています。列がわずかに異なる場合は、カスタムマッピングを追加する必要があります。 –

0

忙しい小さなウェブサービスのようです。

非同期またはマルチスレッドにすることを検討するかもしれません。それ以外の場合は、2つのWebアプリケーション間のカップリングを構築しただけで、最初にそれを避けることができます。

0

バルクロードを使用することは、さまざまな理由から、特定のDBMSに固有の方法から始めて、痛みを伴う可能性があります。

しかし、多くの場合、単一トランザクションでINSERTをすべて実行するだけで、ポータブルな方法でパフォーマンスを向上させることができます。

BEGIN TRANSACTION 
INSERT ... 
INSERT ... 
... 
COMMIT TRANSACTION 
0

時間があれば、最初はSQL Server Service Brokerテクノロジを使用することができますが、最初はかなり習熟しています。

http://msdn.microsoft.com/en-us/library/ms166043(SQL.90).aspx

あなたは火災があなたのプロセスの結果を挿入するストアドプロシージャを言うWebサービスを作成することができます。

関連する問題