DataAdapter.Update(DataSet) メソッド

定義

指定された DataSet 内の "Table" という名前の DataTable に含まれる挿入行、更新行、または削除行に対して、INSERT、UPDATE、または DELETE ステートメントを個別に呼び出します。

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
Public Overridable Function Update (dataSet As DataSet) As Integer
Public MustOverride Function Update (dataSet As DataSet) As Integer

パラメーター

dataSet
DataSet

データ ソースの更新に使用した DataSet

戻り値

Int32

DataSet 内で正常に更新された行の数。

実装

例外

ソース テーブルが無効です。

INSERT、UPDATE、DELETE の各ステートメントを実行しようとしましたが、影響を受けたレコードはありませんでした。

次の例では、 OleDbDataAdapterデータ ソースに対して Update 派生クラスを使用します。

static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbDataAdapter adapter =
            new OleDbDataAdapter();
        adapter.SelectCommand =
            new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder =
            new OleDbCommandBuilder(adapter);

        adapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        // Without the OleDbCommandBuilder, this line would fail.
        adapter.UpdateCommand = builder.GetUpdateCommand();
        adapter.Update(dataSet);
    }
    return dataSet;
}
Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As New DataSet()

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim adapter As New OleDbDataAdapter()

        adapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim builder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(adapter)

        adapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here. 

        ' Without the OleDbCommandBuilder this line would fail.
        builder.GetUpdateCommand()
        adapter.Update(dataSet)
    End Using
    Return dataSet
End Function

注釈

更新は行ごとに実行されます。 挿入、変更、削除された行ごとに、 Update メソッドによって実行された変更の種類 (Insert、Update、Delete) が決定されます。 変更の種類に応じて、変更された行を Insertデータ ソースに伝達するために 、 Update, または Delete コマンド テンプレートが実行されます。 アプリケーションがメソッドを Update 呼び出すと、 DataAdapter プロパティが RowState 検査され、で構成されている DataSetインデックスの順序に基づいて、必要な INSERT、UPDATE、または DELETE ステートメントが各行に対して繰り返し実行されます。 たとえば、 Update DELETE ステートメントを実行し、その後に INSERT ステートメントを実行し、次に別の DataTableDELETE ステートメントを実行する場合があります。これは、.

これらのステートメントはバッチ 処理として実行されないことに注意してください。各行は個別に更新されます。 アプリケーションは、ステートメント型の GetChanges シーケンス (たとえば、UPDATE の前に INSERT) を制御する必要がある状況でメソッドを呼び出すことができます。 詳しくは、「DataAdapter によるデータ ソースの更新」をご覧ください。

INSERT、UPDATE、または DELETE ステートメントが指定されていない場合、メソッドは Update 例外を生成します。 ただし、.NET Framework データ プロバイダーのプロパティを設定SelectCommandすると、単一テーブルの更新に対してSQLステートメントを自動的に生成するオブジェクトOleDbCommandBuilderまたはオブジェクトを作成SqlCommandBuilderできます。 その後、設定しない追加のSQL ステートメントは 、CommandBuilder によって生成されます。 この生成ロジックでは、キー列の情報が DataSet. 詳細については、「 CommandBuilders を使用したコマンドの生成」を参照してください。

このメソッドは Update 、更新を実行する前に、最初のマッピングに一覧表示されているテーブルから行を取得します。 Update次に、プロパティの値を使用して行をUpdatedRowSource更新します。 返される追加の行は無視されます。

データが再度読み込 DataSetまれた後、 OnRowUpdated イベントが発生し、ユーザーは調整された DataSet 行とコマンドによって返されるすべての出力パラメーターを検査できます。 行が正常に更新されると、その行に対する変更は受け入れられます。

使用 Updateする場合、実行順序は次のようになります。

  1. 内の DataRow 値は、パラメーター値に移動されます。

  2. OnRowUpdating イベントが発生します。

  3. コマンドが実行されます。

  4. コマンドが設定 FirstReturnedRecordされている場合は、最初に返された結果が DataRow.

  5. 出力パラメーターがある場合は、〘に配置されます DataRow

  6. OnRowUpdated イベントが発生します。

  7. DataRow.AcceptChanges が呼ばれたとき。 これにより、更新DataRowされたイベントとDataTable.RowChangedイベントのDataTable.RowChanging両方が発生します。

通常に関連付 DataAdapter けられている各コマンドには、パラメーター コレクションが関連付けられています。 パラメーターは、.NET データ プロバイダーのクラスのプロパティをSourceColumn``SourceVersion使用して現在のParameter行にマップされます。 SourceColumn は、現在の DataTable 行のパラメーター値を DataAdapter 取得するために参照する列を参照します。

SourceColumn は、テーブル マッピングが適用される前のマップされていない列名を参照します。 存在しない列を参照している場合 SourceColumn 、実行されるアクションは次 MissingMappingAction のいずれかの値によって異なります。

列挙値 実行した操作
MissingMappingAction.Passthrough マッピングが存在しない場合は、ソース列名とテーブル名を DataSet 使用します。
MissingMappingAction.Ignore A SystemException が生成されます。 マッピングが明示的に設定されている場合、入力パラメーターのマッピングが見つからないのは、通常、エラーの結果です。
MissingMappingAction.Error A SystemException が生成されます。

この SourceColumn プロパティは、出力パラメーターまたは入力/出力パラメーター DataSetの値を . 存在しない列を参照している場合は、例外が生成されます。

.NET データ プロバイダーのクラスのParameterプロパティはSourceVersion、列値の元のバージョン、現在のバージョン、または提案されたバージョンのどちらを使用するかを決定します。 この機能は、多くの場合、UPDATE ステートメントの WHERE 句に元の値を含めて、オプティミスティック コンカレンシー違反をチェックするために使用されます。

メソッドまたはメソッドをAcceptChanges呼び出すと、or DataTable内のすべての変更がDataSetコミットAcceptChangesされます。 メソッドが呼び出される前にUpdateこれらのメソッドのいずれかが呼び出された場合、メソッドの呼び出し後またはAcceptChanges呼び出し後AcceptChangesにさらに変更が加えられている場合を除き、メソッドの呼び出し時Updateに変更はコミットされません。

注意

行の更新中にエラーが発生した場合、例外がスローされ、更新の実行が中止されます。 エラーが発生したときに例外を生成せずに更新操作を続行するには、呼び出すUpdate前にプロパティをContinueUpdateOnErrortrue設定します。 DataAdapter のイベント内で、行ごとにエラーに RowUpdated 応答することもできます。 イベント内で例外を生成せずに更新操作をRowUpdated続行するには、次のRowUpdatedEventArgsプロパティをStatus設定しますContinue

データ ソースに伝達するすべての列にUpdate対して、パラメーターを 、UpdateCommandまたは DeleteCommandに追加するInsertCommand必要があります。 パラメーターのプロパティは SourceColumn 、列の名前に設定する必要があります。 この設定は、パラメーターの値が手動で設定されていないが、現在処理されている行の特定の列から取得されることを示します。

適用対象

こちらもご覧ください