質問

私は問題があると私は答えをインターネット上で長いとハード見てきましたが、何かを見つける傾けます。

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

私は何をしようとしていると、すぐにデータセットからテーブルに結果をインポートしています。

オプション1は、データ・セット内のすべての行を介してそのIループであり、それぞれにインサートを使用します。これで問題は、それが遅く、少しアプリのWebサービスの応答が遅くなりますです。

オプション2は、SQLにデータセットをアップロードバルクにあります。私にとっては悪いニュースは、私がこれを行う方法の見当がつかないです!いずれかは助けることはできますか?

役に立ちましたか?

解決

あなたは SqlBulkCopy を使用することができます。シンプルSqlBulkCopyは、次のようになります。

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);
}

あなたが大量のデータを処理している場合も、<のhref = "http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.batchsizeを設定することもできます。 ASPX」のrel = "nofollowをnoreferrer">のBatchSize のプロパティます。

他のヒント

これは、強大な忙しい小さなWebサービスのように聞こえます。

あなたは代わりに(あるいは加えて)、それは、非同期またはマルチスレッド化することを検討することがあります。そうしないと、あなたはちょうどあなたが最初の場所で回避するために、それらを分割したかもしれない2つのWebアプリケーションとの間のカップリングに建てられました。

あなたはそれが特定のDBMSに固有のものでどのように行うことから始まり、様々な理由のために痛みをすることができバルク・ロードを使用します。 (通常はあなたを取得、次のものがデータを持つファイルを配置する必要がある場合です。)

ただし、多くの場合、単に単一のトランザクションであなたのINSERTsのすべてを実行して、移植可能な方法でのパフォーマンスを劇的に向上させることができます:

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

時間はあなたの側にある場合は、SQL ServerのService Brokerの技術を使用しての中に見ることができるが、かなり急な学習曲線が最初にあります。

http://msdn.microsoft.com/ EN-US /ライブラリ/ ms166043(SQL.90).aspxの

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top