英語で読む

次の方法で共有


DataSet.GetChanges メソッド

定義

前回 DataSet を読み取るか、AcceptChanges() を呼び出した以降にこのデータセットに対して行われたすべての変更が格納されているこのデータセットのコピーを取得します。

オーバーロード

GetChanges()

前回 DataSet を読み取るか、AcceptChanges() を呼び出した以降にこのデータセットに対して行われたすべての変更が格納されているこのデータセットのコピーを取得します。

GetChanges(DataRowState)

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

GetChanges()

ソース:
DataSet.cs
ソース:
DataSet.cs
ソース:
DataSet.cs

前回 DataSet を読み取るか、AcceptChanges() を呼び出した以降にこのデータセットに対して行われたすべての変更が格納されているこのデータセットのコピーを取得します。

public System.Data.DataSet? GetChanges ();
public System.Data.DataSet GetChanges ();

戻り値

この DataSet の変更内容のコピー。これに対してアクションを実行した後、Merge(DataSet) を使って元のデータにマージできます。 変更された行が見つからない場合、このメソッドは null を返します。

次の例では、1 つのテーブル、2 つの列、10 行を含む単純な DataSet を作成します。 2 つの値が変更され、1 つの行が追加されます。 変更されたデータのサブセットは、 メソッドを使用して作成されます GetChanges 。 エラーを調整すると、新しい列がサブセットに追加され、スキーマが変更されます。 を MergeMissingSchemaAction.Add設定して メソッドをmissingSchemaAction呼び出すと、新しい列が元DataSetのオブジェクトのスキーマに追加されます。

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();
        }
    }
}

注釈

保留中の変更がある元DataSetのすべての行のコピーを含む新しい DataSet を作成します。 変更されていない行に、変更された行の外部キーに対応する主キーが含まれている場合、リレーションシップ制約によって変更されていない行が新しい DataSet 行に追加される可能性があります。 保留中の変更がある元DataSetnull行がない場合、 メソッドは を返します。

こちらもご覧ください

適用対象

GetChanges(DataRowState)

ソース:
DataSet.cs
ソース:
DataSet.cs
ソース:
DataSet.cs

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

public System.Data.DataSet? GetChanges (System.Data.DataRowState rowStates);
public System.Data.DataSet GetChanges (System.Data.DataRowState rowStates);

パラメーター

rowStates
DataRowState

DataRowState 値のいずれか 1 つ。

戻り値

アクションを実行した後、DataSet を使用して元のデータセットにマージするために使用できる、Merge(DataSet) のフィルター処理後のコピー。 必要な DataRowState の行が見つからない場合、このメソッドは null を返します。

次の例では、 メソッドを GetChanges 使用して 2 つ目 DataSet のオブジェクトを作成し、データ ソースの更新に使用します。

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);
}

注釈

メソッドは GetChanges 、元の に導入された変更のみを含む 2 番目 DataSet のオブジェクトを生成するために使用されます。 引数を rowStates 使用して、新しいオブジェクトに含める変更の種類を指定します。

この返されたコピーは、この元 DataSetの にマージして戻すように設計されています。 リレーションシップの制約により、マークされた Unchanged 親行が含まれる場合があります。 目的 DataRowState の行が見つからない場合、メソッドは を GetChanges 返します null

こちらもご覧ください

適用対象