DataSet.GetChanges メソッド ()
アセンブリ: System.Data (system.data.dll 内)

Dim instance As DataSet Dim returnValue As DataSet returnValue = instance.GetChanges
アクションを実行した後、Merge を使用して元のデータセットにマージするために使用できる、この DataSet の変更のコピー。変更がない場合は null 参照 (Visual Basic では Nothing)。

前回 DataSet を読み取るか、AcceptChanges を呼び出した以降にこのデータセットに対して行われたすべての変更が格納されているこのデータセットのコピーを取得します。このコピーは、元の DataSet にマージできるよう特別に設計されています。リレーションシップ制約があるために、Unchanged の親行が含まれる場合があります。これらの rowStates の行が見つからない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。

1 つのテーブル、2 列、および 10 行で単純な DataSet を作成する例を次に示します。2 つの値を変更し、1 行追加します。変更されたデータのサブセットは、GetChanges メソッドを使用して作成されます。エラーを調整した後、新しい列をサブセットに追加し、スキーマを変更します。missingSchemaAction を MissingSchemaAction.Add に設定して Merge メソッドを呼び出すと、元の DataSet オブジェクトのスキーマに新しい列が追加されます。
Private Sub DemonstrateMerge() ' Create a DataSet with one table, two columns, ' and three rows. Dim dataSet As New DataSet("dataSet") Dim table As New DataTable("Items") Dim idColumn As New DataColumn("id", _ Type.GetType("System.Int32"), "") idColumn.AutoIncrement = True Dim itemColumn As New DataColumn("Item", _ Type.GetType("System.Int32"), "") ' Create DataColumn array to set primary key. Dim keyColumn(1) As DataColumn Dim row As DataRow ' Create variable for temporary DataSet. Dim changesDataSet As DataSet ' Add RowChanged event handler for the table. AddHandler table.RowChanged, AddressOf Row_Changed dataSet.Tables.Add(table) table.Columns.Add(idColumn) table.Columns.Add(itemColumn) ' Set primary key column. keyColumn(0) = idColumn table.PrimaryKey = keyColumn ' Add ten rows. Dim i As Integer For i = 0 To 9 row = table.NewRow() row("Item") = i table.Rows.Add(row) Next i ' Accept changes. dataSet.AcceptChanges() PrintValues(dataSet, "Original values") ' Change row values. table.Rows(0)("Item") = 50 table.Rows(1)("Item") = 111 ' Add one row. row = table.NewRow() row("Item") = 74 table.Rows.Add(row) ' Insert code for error checking. Set one row in error. table.Rows(1).RowError = "over 100" PrintValues(dataSet, "Modified and New Values") ' If the table has changes or errors, create a subset DataSet. If dataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) _ And dataSet.HasErrors Then ' Use GetChanges to extract subset. changesDataSet = dataSet.GetChanges( _ DataRowState.Modified Or DataRowState.Added) PrintValues(changesDataSet, "Subset values") ' Insert code to reconcile errors. In this case, reject changes. Dim changesTable As DataTable For Each changesTable In changesDataSet.Tables If changesTable.HasErrors Then Dim changesRow As DataRow For Each changesRow In changesTable.Rows 'Console.WriteLine(changesRow["Item"]); If CInt(changesRow("Item", _ DataRowVersion.Current)) > 100 Then changesRow.RejectChanges() changesRow.ClearErrors() End If Next changesRow End If Next changesTable ' Add a column to the changesDataSet. changesDataSet.Tables("Items").Columns.Add( _ New DataColumn("newColumn")) PrintValues(changesDataSet, "Reconciled subset values") ' Merge changes back to first DataSet. dataSet.Merge(changesDataSet, False, _ System.Data.MissingSchemaAction.Add) End If PrintValues(dataSet, "Merged Values") End Sub Private Sub Row_Changed(sender As Object, e As DataRowChangeEventArgs) Console.WriteLine("Row Changed " + e.Action.ToString() _ + ControlChars.Tab + e.Row.ItemArray(0).ToString()) End Sub Private Sub PrintValues(dataSet As DataSet, label As String) Console.WriteLine(label + ControlChars.Cr) Dim table As DataTable For Each table In dataSet.Tables Console.WriteLine("TableName: " + table.TableName) Dim row As DataRow For Each row In table.Rows Dim column As DataColumn For Each column In table.Columns Console.Write(ControlChars.Tab & " " _ & row(column).ToString()) Next column Console.WriteLine() Next row Next table End Sub
private void DemonstrateMerge() { // Create a DataSet with one table, two columns, // and three rows. DataSet dataSet = new DataSet("dataSet"); DataTable table = new DataTable("Items"); DataColumn idColumn = new DataColumn("id", Type.GetType("System.Int32"),""); idColumn.AutoIncrement=true; DataColumn itemColumn = new DataColumn("Item", Type.GetType("System.Int32"),""); // DataColumn array to set primary key. DataColumn[] keyColumn= new DataColumn[1]; DataRow row; // Create variable for temporary DataSet. DataSet changesDataSet; // Add RowChanged event handler for the table. table.RowChanged+=new DataRowChangeEventHandler( Row_Changed); dataSet.Tables.Add(table); table.Columns.Add(idColumn); table.Columns.Add(itemColumn); // Set primary key column. keyColumn[0]= idColumn; table.PrimaryKey=keyColumn; // Add ten rows. for(int i = 0; i <10;i++) { row=table.NewRow(); row["Item"]= i; table.Rows.Add(row); } // Accept changes. dataSet.AcceptChanges(); PrintValues(dataSet, "Original values"); // Change row values. table.Rows[0]["Item"]= 50; table.Rows[1]["Item"]= 111; // Add one row. row=table.NewRow(); row["Item"]=74; table.Rows.Add(row); // Insert code for error checking. Set one row in error. table.Rows[1].RowError= "over 100"; PrintValues(dataSet, "Modified and New Values"); // If the table has changes or errors, // create a subset DataSet. if(dataSet.HasChanges(DataRowState.Modified | DataRowState.Added)& dataSet.HasErrors) { // Use GetChanges to extract subset. changesDataSet = dataSet.GetChanges( DataRowState.Modified|DataRowState.Added); PrintValues(changesDataSet, "Subset values"); // Insert code to reconcile errors. In this case, reject changes. foreach(DataTable changesTable in changesDataSet.Tables) { if (changesTable.HasErrors) { foreach(DataRow changesRow in changesTable.Rows) { //Console.WriteLine(changesRow["Item"]); if((int)changesRow["Item",DataRowVersion.Current ]> 100) { changesRow.RejectChanges(); changesRow.ClearErrors(); } } } } // Add a column to the changesDataSet. changesDataSet.Tables["Items"].Columns.Add( new DataColumn("newColumn")); PrintValues(changesDataSet, "Reconciled subset values"); // Merge changes back to first DataSet. dataSet.Merge(changesDataSet, false, System.Data.MissingSchemaAction.Add); } PrintValues(dataSet, "Merged Values"); } private void Row_Changed(object sender, DataRowChangeEventArgs e) { Console.WriteLine("Row Changed " + e.Action.ToString() + "\table" + e.Row.ItemArray[0]); } private void PrintValues(DataSet dataSet, string label) { Console.WriteLine(label + "\n"); foreach(DataTable table in dataSet.Tables) { Console.WriteLine("TableName: " + table.TableName); foreach(DataRow row in table.Rows) { foreach(DataColumn column in table.Columns) { Console.Write("\table " + row[column] ); } Console.WriteLine(); } } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DataSet.GetChanges メソッド (DataRowState)
アセンブリ: System.Data (system.data.dll 内)

Dim instance As DataSet Dim rowStates As DataRowState Dim returnValue As DataSet returnValue = instance.GetChanges(rowStates)
- rowStates
DataRowState 値の 1 つ。
アクションを実行した後、Merge を使用して元のデータセットにマージするために使用できる、DataSet のフィルタ処理後のコピー。必要な DataRowState の行が見つからない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。

GetChanges メソッドを使用して、元のオブジェクトの変更だけを格納する 2 つ目の DataSet オブジェクトを作成します。引数 rowStates を使用して、この 2 つ目のオブジェクトに格納する変更の種類を指定します。
この返されたコピーは、元の DataSet にマージされるよう設計されています。リレーションシップ制約があるために、Unchanged マークが付けられた親行が含まれる場合があります。必要な DataRowState の行が見つからない場合は、GetChanges メソッドが null 参照 (Visual Basic では Nothing) を返します。

GetChanges メソッドを使用して、データ ソースの更新に使用する 2 番目の DataSet オブジェクトを作成する例を次に示します。
Private Sub UpdateDataSet(ByVal dataSet As DataSet) ' Check for changes with the HasChanges method first. If Not dataSet.HasChanges(DataRowState.Modified) Then Exit Sub End If ' Create temporary DataSet variable and ' GetChanges for modified rows only. Dim tempDataSet As DataSet = _ dataSet.GetChanges(DataRowState.Modified) ' Check the DataSet for errors. If tempDataSet.HasErrors Then ' Insert code to resolve errors. End If ' After fixing errors, update the data source with ' the DataAdapter used to create the DataSet. adapter.Update(tempDataSet) End Sub
private void UpdateDataSet(DataSet dataSet) { // Check for changes with the HasChanges method first. if(!dataSet.HasChanges(DataRowState.Modified)) return; // Create temporary DataSet variable and // GetChanges for modified rows only. DataSet tempDataSet = dataSet.GetChanges(DataRowState.Modified); // Check the DataSet for errors. if(tempDataSet.HasErrors) { // Insert code to resolve errors. } // After fixing errors, update the data source with // the DataAdapter used to create the DataSet. adapter.Update(tempDataSet); }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DataSet.GetChanges メソッド

名前 | 説明 |
---|---|
DataSet.GetChanges () | 前回 DataSet を読み取るか、AcceptChanges を呼び出した以降にこのデータセットに対して行われたすべての変更が格納されているこのデータセットのコピーを取得します。 .NET Compact Framework によってサポートされています。 |
DataSet.GetChanges (DataRowState) | 前回 DataSet を読み取るか、AcceptChanges を呼び出した以降にこのデータセットに対して行われたすべての変更が格納されているこのデータセットのコピーを、DataRowState によってフィルタ処理した後で取得します。 .NET Compact Framework によってサポートされています。 |
