Ler em inglês

Compartilhar via


DataSet.GetChanges Método

Definição

Obtém uma cópia do DataSet que contém todas as alterações feitas nele desde que foi carregado pela última vez ou desde que AcceptChanges() foi chamado.

Sobrecargas

GetChanges()

Obtém uma cópia do DataSet que contém todas as alterações feitas nele desde que ele foi carregado ou desde que o AcceptChanges() foi chamado pela última vez.

GetChanges(DataRowState)

Obtém uma cópia do DataSet que contém todas as alterações feitas desde o último carregamento ou desde que AcceptChanges() foi chamado, filtrado por DataRowState.

GetChanges()

Origem:
DataSet.cs
Origem:
DataSet.cs
Origem:
DataSet.cs

Obtém uma cópia do DataSet que contém todas as alterações feitas nele desde que ele foi carregado ou desde que o AcceptChanges() foi chamado pela última vez.

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

Retornos

Uma cópia das alterações desse DataSet que pode ter ações realizadas nele e posteriormente ser mesclada novamente usando Merge(DataSet). Se não forem encontradas linhas alteradas, o método retornará null.

Exemplos

O exemplo a seguir cria um DataSet simples com uma tabela, duas colunas e dez linhas. Dois valores são alterados e uma linha é adicionada. Um subconjunto dos dados alterados é criado usando o GetChanges método . Depois de reconciliar erros, uma nova coluna é adicionada ao subconjunto, alterando o esquema. Quando o Merge método é chamado com o missingSchemaAction definido como MissingSchemaAction.Add, a nova coluna é adicionada ao esquema do objeto original 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();
        }
    }
}

Comentários

Cria um novo DataSet que contém uma cópia de todas as linhas no original DataSet que têm alterações pendentes. As restrições de relação podem fazer com que linhas adicionais inalteradas sejam adicionadas ao novo DataSet se as linhas inalteradas contiverem chaves primárias correspondentes a chaves estrangeiras nas linhas alteradas. O método retornará null se não houver linhas no original DataSet que tenham alterações pendentes.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetChanges(DataRowState)

Origem:
DataSet.cs
Origem:
DataSet.cs
Origem:
DataSet.cs

Obtém uma cópia do DataSet que contém todas as alterações feitas desde o último carregamento ou desde que AcceptChanges() foi chamado, filtrado por DataRowState.

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

Parâmetros

rowStates
DataRowState

Um dos valores de DataRowState.

Retornos

Uma cópia filtrada do DataSet que pode ter ações executadas nela e, mais tarde, ser mesclada novamente com o Merge(DataSet). Se nenhuma linha do DataRowState desejado for encontrada, o método retornará null.

Exemplos

O exemplo a seguir usa o GetChanges método para criar um segundo DataSet objeto, que é usado para atualizar uma fonte de dados.

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

Comentários

O GetChanges método é usado para produzir um segundo DataSet objeto que contém apenas as alterações introduzidas no original. Use o rowStates argumento para especificar o tipo de alterações que o novo objeto deve incluir.

Essa cópia retornada foi projetada para ser mesclada novamente neste original DataSet. As restrições de relação podem fazer com que as linhas pai marcadas Unchanged como incluídas. Se nenhuma linha do desejado DataRowState for encontrada, o GetChanges método retornará null.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1