0

すべて実行する必要がある一連の SQL Update コマンドがある状況があります。DataSet がバッチ更新を実行できることは知っていますが、それを達成できた唯一の方法は、最初にテーブル全体をデータセットにロードすることです。テーブル内のレコードのサブセットのみを更新したい場合はどうすればよいですか?

4

2 に答える 2

2

ここで最も簡単な方法は、必要な行 (更新したい行) をテーブルにロードすることです。RowState が「Inserted」であることを再確認してください。「更新」を行うストアド プロシージャ (SqlCommand にラップされている) を使用してアダプターの InsertCommand プロパティを割り当てます。この調整により、テーブルに存在するすべての行が確実に更新されます。

ここでの基本は次のとおりです。DataAdapter は、状態が更新されている行に対して UpdateCommand を実行し、状態が挿入されている行に対して InsertCommand を実行し、最後に状態が削除されている行に対して DeleteCommand を実行します。

于 2008-12-11T07:25:03.907 に答える
1

EDITED: あなたのコメントに基づいて、まず一括コピー メソッドを使用してステージング テーブルに移動することをお勧めします。次に、ステージング テーブルに基づいて、実際のテーブルで単一の更新を実行できます。

=========

1 つの方法は、SQL コマンドを自分で作成することです。ただし、自分自身を守るために、SQL インジェクションの可能性について読むことをお勧めします。状況とプラットフォームによっては、他のオプションがあります。

たとえば、大量のデータを処理している場合は、保持テーブルに一括インポートを実行してから、単一の更新コマンドを発行できます。また、レコードを XML として渡すことにも成功しました (私の環境では、DOM の読み込みコストを相殺するために少なくとも 50 行が必要であることがわかりました。私の場合、スケーラビリティの問題は問題にならないことがわかっていました)。

私が見た他のいくつかのことは、人々が更新をバイナリフィールドにパッケージ化することでした。たとえば、各列に1つのバイナリフィールドがあり、バイナリフィールドをアンパックする関数があります。ここでも、環境でテストする必要があります。

そうは言っても、必要な更新ごとに単一の更新コマンドまたはストアド プロシージャを呼び出すだけでは不十分であることを確認しましたか? コマンドをバッチ処理する必要さえないかもしれません。

  • ジョシュ

時期尚早の最適化に注意してください。

于 2008-11-22T04:38:09.150 に答える