[SQL 生成の詳細オプション] ダイアログ ボックス
更新 : 2007 年 11 月
アダプタに対して SQL ステートメントまたはストアド プロシージャを作成する方法を制御できます。データ ウィザードのいずれかで [SQL ステートメントの生成] ページの [詳細オプション] ボタンをクリックすると、このダイアログ ボックスが表示されます。このダイアログ ボックスのオプションはすべて、CustomersTableAdapter.Update(DataTable) などの更新プロシージャの一部として呼び出されるステートメントまたはプロシージャに関係します。
ユーザー インターフェイス要素の一覧
[INSERT、UPDATE、および DELETE ステートメントの生成]
これをオンにすると、ウィザードでは、アダプタの UpdateCommand、InsertCommand、および DeleteCommand の各オブジェクトに対する SQL ステートメントまたはストアド プロシージャが作成されます。生成されるステートメントまたはプロシージャの詳細については、ウィザードのクエリの種類の選択ペインで制御されます。このチェック ボックスをオフにすると、ダイアログ ボックスの残りのオプションは使用できなくなり、適用されません。このチェック ボックスをオフにするのは、普通、次のような場合です。
データ ソースからデータを読み取るためだけにアダプタを使い、書き込みには使用しない場合。このチェック ボックスをオフにすると、フォームまたはコンポーネントのコードが少なくなります。
ウィザードが終了した後、自分でコマンドを記述する場合。
チェック ボックスをオフにし、UpdateCommand、InsertCommand、または DeleteCommand の各オブジェクトに対するステートメントまたはストアド プロシージャを生成しない場合は、データ アダプタの Update メソッドを呼び出しても何も行われません。
[オプティミスティック同時実行制御]
オンにすると、ウィザードは、更新されているレコードのすべての列の値をデータベース内の対応するレコードと一致させる WHERE 句を含む SQL コマンドを生成します。メモ : このオプションは、[INSERT、UPDATE、および DELETE ステートメントの生成] チェック ボックスがオンになっている場合にだけ使用できます。
たとえば、このオプションを使って生成される UPDATE ステートメントの構文は次のようになります。
UPDATE Customers SET CustomerID = ?, CompanyName = ?, Phone = ? WHERE (CustomerID = ?) AND (CompanyName = ?) AND (Phone = ? OR ? IS NULL AND Phone IS NULL);
このチェック ボックスをオフにすると、構文は次のようになります。
UPDATE Customers SET CustomerID = ?, CompanyName = ?, Phone = ? WHERE (CustomerID = ?)
各列の値をチェックすることによる影響として、データセットを読み取った後で他のユーザーがレコードを変更したことにより列が変更された場合、コマンドはエラーになります。このオプションを設定せず、WHERE 句が単純にレコードを特定するだけの場合は、そのレコードを更新すると、ほかのユーザーが行った変更が警告なしにオーバーライドされる場合があります。
データセット更新時の同時実行チェックの詳細については、「ADO.NET におけるデータ同時実行制御の概要」を参照してください。
[データ テーブルの更新]
オンにすると、ウィザードは、それぞれの Update コマンドおよび Insert コマンドに対して Select ステートメントを生成します。メモ : このオプションは、[INSERT、UPDATE、および DELETE ステートメントの生成] チェック ボックスがオンになっている場合にだけ使用できます。
Select ステートメントは、アダプタ内の対応するコマンド オブジェクトに追加されて、Update コマンドまたは Insert コマンドが終了した直後に実行されます。Select ステートメントは、ただ 1 つのレコード、つまり更新されたばかりのレコードの更新バージョンを返すように構成されます。
メモ : ステートメントをセミコロン (;) で区切ることにより、アダプタのコマンド オブジェクトの CommandText プロパティに複数のステートメントを追加できます。
更新後のレコードを取得すると、そのレコードの更新された列の値がデータセットに書き込まれます。次の列も対象になります。
データベースが既定値を格納する列
自動インクリメントされる列
タイムスタンプ列
データベース トリガの結果によって影響を受ける列
このオプションを指定すると、更新のたびに 2 つのステートメント (更新ステートメントとその後の Select ステートメント) が実行されるので、データベース内のほとんどのレコードが更新される場合は非効率的です。この場合は、すべての更新が行われた後で、単純にデータ テーブル全体を一度に設定し直すのが最も効率的です。
メモ : データ テーブルの再表示は、SQL ステートメントのバッチ処理がサポートされたデータベースのみで使用できます。たとえば、Microsoft Access では、データ テーブルの再表示は、他の操作を実行するコマンドと同じコマンドで実行できません。