DataAdapter.Update(DataSet) Método

Definición

Llama a las instrucciones INSERT, UPDATE o DELETE respectivas para cada fila insertada, actualizada o eliminada en el objeto DataSet especificado a partir de un objeto DataTable denominado "Table".

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
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

Parámetros

dataSet
DataSet

Clase DataSet que se utiliza para actualizar el origen de datos.

Devoluciones

Número de filas del DataSet actualizadas correctamente.

Implementaciones

Excepciones

La tabla de origen no es válida.

El hecho de intentar ejecutar una instrucción INSERT, UPDATE o DELETE no ha afectado a ningún registro.

Ejemplos

En el ejemplo siguiente se usa la clase derivada , OleDbDataAdapteren Update el origen de datos.

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

Comentarios

La actualización se realiza por fila. Para cada fila insertada, modificada y eliminada, el Update método determina el tipo de cambio que se ha realizado en él (Insertar, Actualizar o Eliminar). Según el tipo de cambio, la Insertplantilla de comando , Update, o Delete se ejecuta para propagar la fila modificada al origen de datos. Cuando una aplicación llama al Update método , DataAdapter examina la RowState propiedad y ejecuta las instrucciones INSERT, UPDATE o DELETE necesarias de forma iterativa para cada fila, en función del orden de los índices configurados en .DataSet Por ejemplo, Update podría ejecutar una instrucción DELETE, seguida de una instrucción INSERT y, a continuación, otra instrucción DELETE, debido al orden de las filas de DataTable.

Debe tenerse en cuenta que estas instrucciones no se realizan como un proceso por lotes; cada fila se actualiza individualmente. Una aplicación puede llamar al GetChanges método en situaciones en las que debe controlar la secuencia de tipos de instrucción (por ejemplo, INSERT antes de UPDATE). Para obtener más información, consulte Actualización de orígenes de datos con DataAdapters.

Si no se han especificado instrucciones INSERT, UPDATE o DELETE, el Update método genera una excepción. Sin embargo, puede crear un SqlCommandBuilder objeto o OleDbCommandBuilder para generar automáticamente instrucciones SQL para actualizaciones de tabla única si establece la SelectCommand propiedad de un proveedor de datos de .NET Framework. A continuación, el CommandBuilder genera cualquier instrucción SQL adicional que no establezca. Esta lógica de generación requiere que la información de columna de clave esté presente en .DataSet Para obtener más información, vea Generar comandos con CommandBuilders.

El Update método recupera filas de la tabla enumerada en la primera asignación antes de realizar una actualización. A Update continuación, actualiza la fila con el valor de la UpdatedRowSource propiedad . Se omiten las filas adicionales devueltas.

Una vez que se vuelven a cargar los datos en DataSet, se genera el OnRowUpdated evento , lo que permite al usuario inspeccionar la fila reconciliada DataSet y los parámetros de salida devueltos por el comando. Después de que una fila se actualice correctamente, se aceptan los cambios en esa fila.

Cuando se usa Update, el orden de ejecución es el siguiente:

  1. Los valores de DataRow se mueven a los valores de parámetro.

  2. Se genera el evento OnRowUpdating.

  3. El comando se ejecuta.

  4. Si el comando se establece FirstReturnedRecorden , el primer resultado devuelto se coloca en .DataRow

  5. Si hay parámetros de salida, se colocan en .DataRow

  6. Se genera el evento OnRowUpdated.

  7. Se llama a DataRow.AcceptChanges. Esto generará los DataTable.RowChanging eventos y DataTable.RowChanged para el actualizado DataRow.

Cada comando asociado a DataAdapter normalmente tiene una colección de parámetros asociada. Los parámetros se asignan a la fila actual a través de las SourceColumn propiedades y SourceVersion de la clase de Parameter un proveedor de datos de .NET. SourceColumn hace referencia a una DataTable columna que hace DataAdapter referencia a para obtener los valores de parámetro de la fila actual.

SourceColumn hace referencia al nombre de columna sin asignar antes de que se hayan aplicado asignaciones de tabla. Si SourceColumn hace referencia a una columna inexistente, la acción realizada depende de uno de los valores siguientes MissingMappingAction .

Valor de enumeración Acción realizada
MissingMappingAction.Passthrough Use los nombres de columna de origen y los nombres de tabla en DataSet si no hay ninguna asignación presente.
MissingMappingAction.Ignore Se genera un SystemException . Cuando las asignaciones se establecen explícitamente, una asignación que falta para un parámetro de entrada suele ser el resultado de un error.
MissingMappingAction.Error Se genera un SystemException .

La SourceColumn propiedad también se usa para asignar el valor de los parámetros output o input/output a DataSet. Se genera una excepción si hace referencia a una columna inexistente.

La SourceVersion propiedad de una clase del proveedor de datos de Parameter .NET determina si se debe usar la versión Original, Actual o Propuesta del valor de columna. Esta funcionalidad se suele usar para incluir valores originales en la cláusula WHERE de una instrucción UPDATE para comprobar si hay infracciones de simultaneidad optimista.

Al llamar al método o AcceptChanges al AcceptChanges método, se confirmarán todos los cambios en DataSet o DataTable. Si se llama a cualquiera de estos métodos antes de llamar al Update método , no se confirmarán cambios cuando se llame al Update método, a menos que se hayan realizado más cambios desde AcceptChanges o AcceptChanges se haya llamado a .

Nota

Si se produce un error al actualizar una fila, se produce una excepción y se interrumpe la ejecución de la actualización. Para continuar con la operación de actualización sin generar excepciones cuando se encuentra un error, establezca la ContinueUpdateOnError propiedad true en antes de llamar a Update. También puede responder a errores por fila dentro del RowUpdated evento de dataAdapter. Para continuar con la operación de actualización sin generar una excepción dentro del RowUpdated evento, establezca la Status propiedad de en ContinueRowUpdatedEventArgs .

Para cada columna que se propaga al origen de datos en Update, se debe agregar un parámetro a InsertCommand, UpdateCommando DeleteCommand. La SourceColumn propiedad del parámetro debe establecerse en el nombre de la columna. Esta configuración indica que el valor del parámetro no se establece manualmente, pero se toma de la columna concreta de la fila procesada actualmente.

Se aplica a

Consulte también