DbDataAdapter.Update メソッド (DataTable)
指定した DataTable 内の挿入行、更新行、または削除行に対して、INSERT、UPDATE、または DELETE ステートメントを個別に呼び出します。
Overloads Public Function Update( _
ByVal dataTable As DataTable _) As Integer
[C#]
public int Update(DataTabledataTable);
[C++]
public: int Update(DataTable* dataTable);
[JScript]
public function Update(
dataTable : DataTable) : int;
パラメータ
- dataTable
データ ソースの更新に使用する DataTable 。
戻り値
DataSet 内で正常に更新された行の数。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | DataSet が無効です。 |
InvalidOperationException | ソース テーブルが無効です。 |
SystemException | 更新する DataRow が存在しません。
または 更新する DataTable が存在しません。 または ソースとして使用する DataSet が存在しません。 |
DBConcurrencyException | INSERT、UPDATE、DELETE の各ステートメントを実行しようとしましたが、影響を受けたレコードはありませんでした。 |
解説
アプリケーションが Update メソッドを呼び出すと、 DbDataAdapter は、 RowState プロパティを調べ、 DataSet に設定されているインデックスの順序に基づいて、要求された INSERT、UPDATE、または DELETE ステートメントを各行に対して反復的に実行します。たとえば、 Update が呼び出されたときに、 DataTable 内の行の順序に応じて、DELETE ステートメントを実行し、INSERT ステートメントを実行してから、別の DELETE ステートメントを実行します。
これらのステートメントはバッチ処理として実行されるのではない点に注意してください。各行は個別に更新されます。UPDATE の前に INSERT を実行するなど、ステートメントの種類のシーケンスを制御する必要がある場合は、アプリケーションから GetChanges メソッドを呼び出すことができます。詳細については、「 DataAdapter および DataSet によるデータベースの更新 」を参照してください。
INSERT、UPDATE または DELETE ステートメントが指定されていない場合、 Update メソッドでは、例外が生成されます。ただし、.NET Framework データ プロバイダの SelectCommand プロパティを設定した場合は、単一テーブルを更新する SQL ステートメントを自動的に生成する SqlCommandBuilder または OleDbCommandBuilder オブジェクトを作成できます。これによって、追加の SQL ステートメントが、CommandBuilder によって自動的に生成されます。この生成ロジックでは、 DataSet 内にキー列情報が存在している必要があります。詳細については、「 自動生成コマンド 」を参照してください。
Update メソッドは、更新の実行前の最初のマップに示されたテーブルから行を取得します。次に、 Update は、 UpdatedRowSource プロパティの値を使用して行を更新します。返された追加の行はすべて無視されます。
DataSet にデータが戻されるたびに、 OnRowUpdated イベントが発生します。これによって、ユーザーは、 DataSet の調整済みの行、およびコマンドによって返された出力パラメータを検査できます。行が正常に更新されると、その行に対する変更が受け入れられます。
Update を使用するときは、次の順序で処理が実行されます。
- DataRow 内の値が、パラメータ値に移動されます。
- OnRowUpdating イベントが発生します。
- コマンドが実行されます。
- コマンドが FirstReturnedRecord に設定されている場合は、最初に返された結果が DataRow に格納されます。
- 出力パラメータがある場合は、それが DataRow に格納されます。
- OnRowUpdated イベントが発生します。
- 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 プロパティは、 Original 、 Current 、または Proposed のどのバージョンの列値を使用するかを指定します。この機能は、UPDATE ステートメントの WHERE 句に元の値を含めて、オプティミスティック同時実行違反をチェックするためによく使用されます。
メモ 行の更新時にエラーが発生した場合は、例外がスローされ、更新の実行が中断されます。エラーが発生しても例外を生成せずに更新操作を続けるには、 Update を呼び出す前に、 ContinueUpdateOnError プロパティを true に設定します。 SqlDataAdapter または OleDbDataAdapter の RowUpdated イベント内で、行単位でエラーに対応することもできます。 RowUpdated イベント内で例外を生成せずに更新操作を続けるには、 RowUpdatedEventArgs の Status プロパティを Continue に設定します。
使用例
[Visual Basic, C#, C++] OleDbDataAdapter 派生クラスを使用して、データ ソースに Update を実行する例を次に示します。この例では、 OleDbDataAdapter および DataSet が作成されていることを前提にしています。
Public Function CreateCmdsAndUpdate(myDataSet As DataSet, myConnection As String, mySelectQuery As String, myTableName As String) As DataTable
Dim myConn As New OleDbConnection(myConnection)
Dim myDataAdapter As New OleDbDataAdapter()
myDataAdapter.SelectCommand = New OleDbCommand(mySelectQuery, myConn)
Dim custCB As OleDbCommandBuilder = New OleDbCommandBuilder(MyDataAdapter)
myConn.Open()
Dim custDT As DataTable = New DataTable
myDataAdapter.Fill(custDT)
' Code to modify data in DataTable here
myDataAdapter.Update(custDT)
myConn.Close()
Return custDT
End Function 'SelectOleDbSrvRows
[C#]
public DataTable CreateCmdsAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName)
{
OleDbConnection myConn = new OleDbConnection(myConnection);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn);
OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);
myConn.Open();
DataTable custDT = new DataTable();
myDataAdapter.Fill(custDT);
//code to modify data in DataTable here
myDataAdapter.Update(custDT);
myConn.Close();
return custDT;
}
[C++]
DataTable* CreateCmdsAndUpdate(DataSet* myDataSet,String* myConnection,String* mySelectQuery,String* myTableName)
{
OleDbConnection* myConn = new OleDbConnection(myConnection);
OleDbDataAdapter* myDataAdapter = new OleDbDataAdapter;
myDataAdapter->SelectCommand = new OleDbCommand(mySelectQuery, myConn);
OleDbCommandBuilder* custCB = new OleDbCommandBuilder(myDataAdapter);
myConn->Open();
DataTable* custDT = new DataTable;
myDataAdapter->Fill(custDT);
//code to modify data in DataTable here
myDataAdapter->Update(custDT);
myConn->Close();
return custDT;
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
参照
DbDataAdapter クラス | DbDataAdapter メンバ | System.Data.Common 名前空間 | DbDataAdapter.Update オーバーロードの一覧