DataAdapter.Update(DataSet) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
public:
virtual int Update(System::Data::DataSet ^ dataSet);
public:
abstract int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public virtual int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
public abstract int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
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から正常に更新された行の数。
実装
- 属性
例外
ソース テーブルが無効です。
INSERT、UPDATE、または DELETE ステートメントを実行しようとすると、影響を受けるレコードが 0 個発生しました。
例
次の例では、派生クラス ( 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 は、 DataTable内の行の順序が原因で、DELETE ステートメント、INSERT ステートメント、および別の DELETE ステートメントを実行できます。
これらのステートメントはバッチ 処理として実行されないことに注意してください。各行は個別に更新されます。 アプリケーションは、ステートメント型のシーケンスを制御する必要がある場合 (たとえば、UPDATE の前に INSERT) GetChanges メソッドを呼び出すことができます。 詳細については、「 DataAdapters を使用したデータ ソースの更新」を参照してください。
INSERT、UPDATE、または DELETE ステートメントが指定されていない場合、 Update メソッドは例外を生成します。 ただし、.NET Framework データ プロバイダーの SelectCommand プロパティを設定した場合は、SqlCommandBuilderオブジェクトまたは OleDbCommandBuilder オブジェクトを作成して、単一テーブル更新の SQL ステートメントを自動的に生成できます。 その後、設定しない追加の SQL ステートメントは 、CommandBuilder によって生成されます。 この生成ロジックでは、キー列の情報が DataSetに存在する必要があります。 詳細については、「 CommandBuilders を使用したコマンドの生成」を参照してください。
Update メソッドは、更新を実行する前に、最初のマッピングに一覧表示されているテーブルから行を取得します。 Updateは、UpdatedRowSource プロパティの値を使用して行を更新します。 返される追加の行は無視されます。
データが DataSetに読み込まれた後、 OnRowUpdated イベントが発生し、ユーザーは調整された DataSet 行とコマンドによって返されるすべての出力パラメーターを調べることができます。 行が正常に更新されると、その行に対する変更が受け入れられます。
Updateを使用する場合の実行順序は次のとおりです。
DataRow内の値はパラメーター値に移動されます。
OnRowUpdating イベントが発生します。
コマンドが実行されます。
コマンドが
FirstReturnedRecordに設定されている場合、最初に返された結果が DataRowに配置されます。出力パラメーターがある場合は、 DataRowに配置されます。
OnRowUpdated イベントが発生します。
DataRow.AcceptChanges が呼び出されます これにより、更新されたDataRowのDataTable.RowChangingイベントとDataTable.RowChanged イベントの両方が発生します。
DataAdapterに関連付けられている各コマンドには、通常、パラメーター コレクションが関連付けられています。 パラメーターは、.NET データ プロバイダーの Parameter クラスのSourceColumnプロパティとSourceVersionプロパティを使用して現在の行にマップされます。
SourceColumnは、現在の行のパラメーター値を取得するためにDataAdapterが参照するDataTable列を参照します。
SourceColumn は、テーブル マッピングが適用される前のマップされていない列名を参照します。 存在しない列 SourceColumn 参照している場合、実行されるアクションは次の MissingMappingAction 値のいずれかに依存します。
| 列挙値 | 実行した操作 |
|---|---|
MissingMappingAction.Passthrough |
マッピングが存在しない場合は、 DataSet のソース列名とテーブル名を使用します。 |
MissingMappingAction.Ignore |
SystemExceptionが生成されます。 マッピングが明示的に設定されている場合、通常、入力パラメーターに不足しているマッピングはエラーの結果になります。 |
MissingMappingAction.Error |
SystemExceptionが生成されます。 |
SourceColumn プロパティは、出力パラメーターまたは入出力パラメーターの値をDataSetにマップするためにも使用されます。 存在しない列を参照している場合は、例外が生成されます。
.NET データ プロバイダーの Parameter クラスの SourceVersion プロパティは、列値の元のバージョン、現在のバージョン、または提案されたバージョンのどちらを使用するかを決定します。 この機能は、多くの場合、UPDATE ステートメントの WHERE 句に元の値を含めて、オプティミスティック コンカレンシー違反をチェックするために使用されます。
AcceptChanges メソッドまたはAcceptChanges メソッドを呼び出すと、DataSetまたはDataTableのすべての変更がコミットされます。 Update メソッドが呼び出される前にこれらのメソッドのいずれかが呼び出された場合、AcceptChangesまたはAcceptChangesが呼び出されてからさらに変更が行われなければ、Update メソッドの呼び出し時に変更はコミットされません。
注
行の更新中にエラーが発生すると、例外がスローされ、更新の実行が中止されます。 エラーが発生したときに例外を生成せずに更新操作を続行するには、Updateを呼び出す前に、ContinueUpdateOnError プロパティを true に設定します。 DataAdapter の RowUpdated イベント内で、行ごとにエラーに応答することもできます。
RowUpdated イベント内で例外を生成せずに更新操作を続行するには、RowUpdatedEventArgsの Status プロパティを Continue に設定します。
Update上のデータ ソースに伝達するすべての列について、パラメーターをInsertCommand、UpdateCommand、またはDeleteCommandに追加する必要があります。 パラメーターの SourceColumn プロパティは、列の名前に設定する必要があります。 この設定は、パラメーターの値が手動で設定されていないが、現在処理されている行の特定の列から取得されることを示します。