DbDataAdapter.Update メソッド

定義

DataSetで挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

オーバーロード

Update(DataSet, String)

指定した DataTable 名を使用して、DataSet 内の挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

Update(DataRow[], DataTableMapping)

DataRow オブジェクトの指定した配列に挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

Update(DataTable)

指定した DataTableに挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

Update(DataSet)

指定した DataSetに挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

Update(DataRow[])

DataSet内の指定した配列に挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

Update(DataSet, String)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定した DataTable 名を使用して、DataSet 内の挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

public:
 int Update(System::Data::DataSet ^ dataSet, System::String ^ srcTable);
public int Update (System.Data.DataSet dataSet, string srcTable);
override this.Update : System.Data.DataSet * string -> int
Public Function Update (dataSet As DataSet, srcTable As String) As Integer

パラメーター

dataSet
DataSet

データ ソースの更新に使用する DataSet

srcTable
String

テーブル マッピングに使用するソース テーブルの名前。

戻り値

DataSetから正常に更新された行の数。

例外

DataSet が無効です。

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

INSERT、UPDATE、または DELETE ステートメントを実行しようとすると、影響を受けるレコードが 0 個発生しました。

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

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString, string tableName)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers, tableName);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String, _
    ByVal tableName As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        adapter.Update(customers, tableName)

        Return customers
    End Using
End Function

注釈

アプリケーションが Update メソッドを呼び出すと、DbDataAdapterRowState プロパティを調べ、DataSetで構成されたインデックスの順序に基づいて、各行に対して必要な INSERT、UPDATE、または DELETE ステートメントを繰り返し実行します。 たとえば、Update は、DataTable内の行の順序が原因で、DELETE ステートメント、INSERT ステートメント、および別の DELETE ステートメントを実行できます。

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

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

Update メソッドは、DataSet に複数の DataTable オブジェクトが含まれるシナリオをサポートします。このオブジェクトの名前は大文字と小文字のみが異なります。 同じ名前で大文字と小文字が異なる複数のテーブルが DataSetに存在する場合、Update は大文字と小文字を区別して比較を実行して対応するテーブルを検索し、完全に一致するテーブルが存在しない場合は例外を生成します。 次の C# コードは、この動作を示しています。

DataSet ds = new DataSet();  
 ds.Tables.Add("aaa");  
 ds.Tables.Add("AAA");  
 adapter.Update(ds, "aaa"); // Updates "aaa", which already exists in the DataSet.  
 adapter.Update(ds, "AAA"); // Updates "AAA", which already exists in the DataSet.  
    adapter.Update(ds, "Aaa"); // Results in an exception.  

Update が呼び出され、DataSet に名前が大文字と小文字のみが異なる 1 つの DataTable のみが含まれている場合、その DataTable が更新されます。 このシナリオでは、比較では大文字と小文字が区別されません。 次の C# コードは、この動作を示しています。

DataSet dataset = new DataSet();  
 dataset.Tables.Add("aaa");  
    adapter.Update(dataset, "AAA"); // Updates table "aaa" because only one similarly named table is in the DataSet.  

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

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

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

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

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

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

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

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

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

  7. AcceptChanges が呼び出されます。

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

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

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

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

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

手記

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

こちらもご覧ください

適用対象

Update(DataRow[], DataTableMapping)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

DataRow オブジェクトの指定した配列に挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

protected:
 virtual int Update(cli::array <System::Data::DataRow ^> ^ dataRows, System::Data::Common::DataTableMapping ^ tableMapping);
protected virtual int Update (System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping);
override this.Update : System.Data.DataRow[] * System.Data.Common.DataTableMapping -> int
Protected Overridable Function Update (dataRows As DataRow(), tableMapping As DataTableMapping) As Integer

パラメーター

dataRows
DataRow[]

データ ソースの更新に使用 DataRow オブジェクトの配列。

tableMapping
DataTableMapping

使用する TableMappings コレクション。

戻り値

DataRow オブジェクトの配列から正常に更新された行の数。

例外

DataSet が無効です。

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

更新する DataRow はありません。

-又は-

更新する DataTable はありません。

-又は-

ソースとして使用する DataSet はありません。

INSERT、UPDATE、または DELETE ステートメントを実行しようとすると、影響を受けるレコードが 0 個発生しました。

注釈

アプリケーションが Update メソッドを呼び出すと、DbDataAdapterRowState プロパティを調べ、DataSetで構成されたインデックスの順序に基づいて、各行に対して必要な INSERT、UPDATE、または DELETE ステートメントを繰り返し実行します。 たとえば、Update は、DataTable内の行の順序が原因で、DELETE ステートメント、INSERT ステートメント、および別の DELETE ステートメントを実行できます。

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

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

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

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

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

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

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

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

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

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

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

  7. AcceptChanges が呼び出されます。

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

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

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

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

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

手記

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

こちらもご覧ください

適用対象

Update(DataTable)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定した DataTableに挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

public:
 int Update(System::Data::DataTable ^ dataTable);
public int Update (System.Data.DataTable dataTable);
override this.Update : System.Data.DataTable -> int
Public Function Update (dataTable As DataTable) As Integer

パラメーター

dataTable
DataTable

データ ソースの更新に使用される DataTable

戻り値

DataTableから正常に更新された行の数。

例外

DataSet が無効です。

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

更新する DataRow はありません。

-又は-

更新する DataTable はありません。

-又は-

ソースとして使用する DataSet はありません。

INSERT、UPDATE、または DELETE ステートメントを実行しようとすると、影響を受けるレコードが 0 個発生しました。

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

public DataTable CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataTable customers = new DataTable();
        adapter.Fill(customers);

        // code to modify data in DataTable here

        adapter.Update(customers);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataTable

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataTable()
        adapter.Fill(customers)

        ' Code to modify data in DataTable here 

        adapter.Update(customers)
        Return customers
    End Using
End Function

注釈

アプリケーションが Update メソッドを呼び出すと、DbDataAdapterRowState プロパティを調べ、DataSetで構成されたインデックスの順序に基づいて、各行に対して必要な INSERT、UPDATE、または DELETE ステートメントを繰り返し実行します。 たとえば、Update は、DataTable内の行の順序が原因で、DELETE ステートメント、INSERT ステートメント、および別の DELETE ステートメントを実行できます。

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

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

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

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

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

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

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

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

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

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

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

  7. AcceptChanges が呼び出されます。

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

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

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

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

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

手記

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

こちらもご覧ください

適用対象

Update(DataSet)

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

指定した DataSetに挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

public:
 override int Update(System::Data::DataSet ^ dataSet);
public override int Update (System.Data.DataSet dataSet);
override this.Update : System.Data.DataSet -> int
Public Overrides Function Update (dataSet As DataSet) As Integer

パラメーター

dataSet
DataSet

データ ソースの更新に使用される DataSet

戻り値

DataSetから正常に更新された行の数。

実装

例外

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

INSERT、UPDATE、または DELETE ステートメントを実行しようとすると、影響を受けるレコードが 0 個発生しました。

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

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        adapter.Update(customers);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        adapter.Update(customers)

        Return customers
    End Using
End Function

注釈

アプリケーションが Update メソッドを呼び出すと、DbDataAdapterRowState プロパティを調べ、DataSetで構成されたインデックスの順序に基づいて、各行に対して必要な INSERT、UPDATE、または DELETE ステートメントを繰り返し実行します。 たとえば、Update は、DataTable内の行の順序が原因で、DELETE ステートメント、INSERT ステートメント、および別の DELETE ステートメントを実行できます。

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

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

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

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

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

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

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

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

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

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

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

  7. AcceptChanges が呼び出されます。

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

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

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

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

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

手記

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

こちらもご覧ください

適用対象

Update(DataRow[])

ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs
ソース:
DbDataAdapter.cs

DataSet内の指定した配列に挿入、更新、または削除された行ごとに、それぞれの INSERT、UPDATE、または DELETE ステートメントを実行して、データベース内の値を更新します。

public:
 int Update(cli::array <System::Data::DataRow ^> ^ dataRows);
public int Update (System.Data.DataRow[] dataRows);
override this.Update : System.Data.DataRow[] -> int
Public Function Update (dataRows As DataRow()) As Integer

パラメーター

dataRows
DataRow[]

データ ソースの更新に使用 DataRow オブジェクトの配列。

戻り値

DataSetから正常に更新された行の数。

例外

DataSet が無効です。

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

更新する DataRow はありません。

-又は-

更新する DataTable はありません。

-又は-

ソースとして使用する DataSet はありません。

INSERT、UPDATE、または DELETE ステートメントを実行しようとすると、影響を受けるレコードが 0 個発生しました。

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

public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //code to modify data in dataset here

        //Insert new records from DataSet
        DataRow[] rows = customers.Tables[0].Select(
            null, null, DataViewRowState.Added);
        adapter.Update(rows);

        return customers;
    }
}
Public Function CreateCmdsAndUpdate(ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Using connection As New OleDbConnection(connectionString)
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = New OleDbCommand(queryString, connection)
        Dim builder As New OleDbCommandBuilder(adapter)

        connection.Open()

        Dim customers As New DataSet()
        adapter.Fill(customers)

        ' Code to modify data in DataSet here 

        ' Insert new records from DataSet
        Dim rows() As DataRow = customers.Tables(0).Select( _
            Nothing, Nothing, DataViewRowState.Added)
        adapter.Update(rows)

        Return customers
    End Using
End Function

注釈

アプリケーションが Update メソッドを呼び出すと、DbDataAdapterRowState プロパティを調べ、DataSetで構成されたインデックスの順序に基づいて、各行に対して必要な INSERT、UPDATE、または DELETE ステートメントを繰り返し実行します。 たとえば、Update は、DataTable内の行の順序が原因で、DELETE ステートメント、INSERT ステートメント、および別の DELETE ステートメントを実行できます。

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

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

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

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

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

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

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

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

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

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

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

  7. AcceptChanges が呼び出されます。

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

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

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

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

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

手記

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

こちらもご覧ください

適用対象