アダプターに対して 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 では、データ テーブルの再表示は、他の操作を実行するコマンドと同じコマンドで実行できません。
参照
概念
Visual Studio でのデータへの Windows フォーム コントロールのバインド
Visual Studio でのデータへのコントロールのバインド