Leer en inglés

Compartir a través de


DataSet.GetChanges Método

Definición

Obtiene una copia del objeto DataSet que contiene todos los cambios que se le han realizado desde la última vez que se cargó o desde que se llamó a AcceptChanges().

Sobrecargas

GetChanges()

Obtiene una copia del objeto DataSet que contiene todos los cambios que se le han realizado desde que se cargó o se llamó a AcceptChanges() por última vez.

GetChanges(DataRowState)

Obtiene una copia del objeto DataSet que contiene todos los cambios que se le han realizado desde la última vez que se cargó, o desde que se llamó a AcceptChanges(), filtrado por DataRowState.

GetChanges()

Source:
DataSet.cs
Source:
DataSet.cs
Source:
DataSet.cs

Obtiene una copia del objeto DataSet que contiene todos los cambios que se le han realizado desde que se cargó o se llamó a AcceptChanges() por última vez.

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

Devoluciones

Copia de los cambios de este objeto DataSet en el que puede que se hayan realizado acciones y, posteriormente, se hayan vuelto a combinar mediante el método Merge(DataSet). Si no se encuentran filas modificadas, el método devuelve null.

Ejemplos

En el ejemplo siguiente se crea un sencillo DataSet con una tabla, dos columnas y diez filas. Se cambian dos valores y se agrega una fila. Se crea un subconjunto de los datos modificados mediante el GetChanges método . Después de reconciliar errores, se agrega una nueva columna al subconjunto, cambiando el esquema. Cuando se llama al Merge método con el missingSchemaAction establecido MissingSchemaAction.Adden , la nueva columna se agrega al esquema del 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();
        }
    }
}

Comentarios

Crea un nuevo DataSet que contiene una copia de todas las filas del original DataSet que tienen cambios pendientes. Las restricciones de relación pueden hacer que las filas adicionales sin cambios se agreguen al nuevo DataSet si las filas sin cambios contienen claves principales correspondientes a las claves externas de las filas modificadas. El método devuelve null si no hay filas en el original DataSet que tienen cambios pendientes.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.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)

Source:
DataSet.cs
Source:
DataSet.cs
Source:
DataSet.cs

Obtiene una copia del objeto DataSet que contiene todos los cambios que se le han realizado desde la última vez que se cargó, o desde que se llamó a AcceptChanges(), 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

Uno de los valores de DataRowState.

Devoluciones

Copia filtrada del objeto DataSet en el que es posible que se hayan llevado a cabo acciones y que, por consiguiente, se puede volver a combinar mediante Merge(DataSet). Si no se encuentran filas con el DataRowState deseado, el método devolverá null.

Ejemplos

En el ejemplo siguiente se usa el GetChanges método para crear un segundo DataSet objeto, que se usa para actualizar un origen de datos.

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

Comentarios

El GetChanges método se usa para generar un segundo DataSet objeto que contiene solo los cambios introducidos en el original. Use el rowStates argumento para especificar el tipo de cambios que debe incluir el nuevo objeto.

Esta copia devuelta está diseñada para combinarse de nuevo en este original DataSet. Las restricciones de relación pueden hacer que se incluyan las filas primarias marcadas Unchanged . Si no se encuentra ninguna fila del deseado DataRowState , el GetChanges método devuelve null.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.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