DataAdapter.Update(DataSet) Método

Definição

Chama as respectivas instruções INSERT, UPDATE ou DELETE para cada linha inserida, atualizada ou excluída no DataSet especificado em um DataTable denominado “Tabela.”Calls the respective INSERT, UPDATE, or DELETE statements for each inserted, updated, or deleted row in the specified DataSet from a DataTable named "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

O DataSet usado para atualizar a fonte de dados.The DataSet used to update the data source.

Retornos

Int32

O número de linhas atualizadas com êxito a partir do DataSet.The number of rows successfully updated from the DataSet.

Implementações

Exceções

A tabela de origem é inválida.The source table is invalid.

Uma tentativa de executar uma instrução INSERT, UPDATE ou DELETE resultou em zero registro afetado.An attempt to execute an INSERT, UPDATE, or DELETE statement resulted in zero records affected.

Exemplos

O exemplo a seguir usa a classe derivada, OleDbDataAdapter , para Update a fonte de dados.The following example uses the derived class, OleDbDataAdapter, to Update the data source.

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

Comentários

A atualização é executada em uma base por linha.The update is performed on a by-row basis. Para cada linha inserida, modificada e excluída, o Update método determina o tipo de alteração que foi executada nela (INSERT, Update ou Delete).For every inserted, modified, and deleted row, the Update method determines the type of change that has been performed on it (Insert, Update or Delete). Dependendo do tipo de alteração, o ou o Insert Update, modelo de Delete comando é executado para propagar a linha modificada para a fonte de dados.Depending on the type of change, the Insert, Update, or Delete command template executes to propagate the modified row to the data source. Quando um aplicativo chama o Update método, o DataAdapter examina a RowState propriedade e executa as instruções INSERT, Update ou DELETE necessárias iterativamente para cada linha, com base na ordem dos índices configurados no DataSet .When an application calls the Update method, the DataAdapter examines the RowState property, and executes the required INSERT, UPDATE, or DELETE statements iteratively for each row, based on the order of the indexes configured in the DataSet. Por exemplo, Update pode executar uma instrução DELETE, seguida por uma instrução INSERT, e outra instrução DELETE, devido à ordenação das linhas no DataTable .For example, Update might execute a DELETE statement, followed by an INSERT statement, and then another DELETE statement, due to the ordering of the rows in the DataTable.

Deve-se observar que essas instruções não são executadas como um processo em lote; cada linha é atualizada individualmente.It should be noted that these statements are not performed as a batch process; each row is updated individually. Um aplicativo pode chamar o GetChanges método em situações em que você deve controlar a sequência de tipos de instrução (por exemplo, inserir antes da atualização).An application can call the GetChanges method in situations where you must control the sequence of statement types (for example, INSERT before UPDATE). Para obter mais informações, consulte Atualizando fontes de dados com DataAdapters.For more information, see Updating Data Sources with DataAdapters.

Se as instruções INSERT, UPDATE ou DELETE não tiverem sido especificadas, o Update método gerará uma exceção.If INSERT, UPDATE, or DELETE statements have not been specified, the Update method generates an exception. No entanto, é possível criar um objeto SqlCommandBuilder ou OleDbCommandBuilder para gerar automaticamente instruções SQL para atualizações de tabela única caso você defina a propriedade SelectCommand de um provedor de dados do .NET Framework.However, you can create a SqlCommandBuilder or OleDbCommandBuilder object to automatically generate SQL statements for single-table updates if you set the SelectCommand property of a .NET Framework data provider. Em seguida, quaisquer instruções SQL adicionais que você não definir serão geradas pelo CommandBuilder.Then, any additional SQL statements that you do not set are generated by the CommandBuilder. Esta lógica de geração requer que as informações da coluna principal estejam presente no DataSet.This generation logic requires key column information to be present in the DataSet. Para obter mais informações, consulte gerando comandos com CommandBuilders.For more information see Generating Commands with CommandBuilders.

O Update método recupera linhas da tabela listadas no primeiro mapeamento antes de executar uma atualização.The Update method retrieves rows from the table listed in the first mapping before performing an update. UpdateEm seguida, o atualiza a linha usando o valor da UpdatedRowSource propriedade.The Update then refreshes the row using the value of the UpdatedRowSource property. Todas as linhas adicionais retornadas são ignoradas.Any additional rows returned are ignored.

Depois que todos os dados são recarregados no DataSet, o evento OnRowUpdated é acionado, permitindo que o usuário inspecione a linha DataSet reconciliada e todos os parâmetros de saída retornados pelo comando.After any data is loaded back into the DataSet, the OnRowUpdated event is raised, allowing the user to inspect the reconciled DataSet row and any output parameters returned by the command. Depois que uma linha é atualizada com êxito, as alterações feitas nessa linha são aceitas.After a row updates successfully, the changes to that row are accepted.

Ao usar Update o, a ordem de execução é a seguinte:When using Update, the order of execution is as follows:

  1. Os valores no DataRow são movidos para os valores de parâmetro.The values in the DataRow are moved to the parameter values.

  2. O OnRowUpdating evento é gerado.The OnRowUpdating event is raised.

  3. O comando é executado.The command executes.

  4. Se o comando for definido como FirstReturnedRecord , o primeiro resultado retornado será colocado no DataRow .If the command is set to FirstReturnedRecord, then the first returned result is placed in the DataRow.

  5. Se houver parâmetros de saída, eles serão colocados no DataRow .If there are output parameters, they are placed in the DataRow.

  6. O OnRowUpdated evento é gerado.The OnRowUpdated event is raised.

  7. DataRow.AcceptChanges é chamado.DataRow.AcceptChanges is called. Isso irá gerar os DataTable.RowChanging eventos e DataTable.RowChanged para o atualizado DataRow .This will raise both the DataTable.RowChanging and DataTable.RowChanged events for the updated DataRow.

Cada comando associado ao DataAdapter normalmente tem uma coleção de parâmetros associada a ele.Each command associated with the DataAdapter usually has a parameters collection associated with it. Os parâmetros são mapeados para a linha atual por meio das SourceColumn SourceVersion Propriedades e de uma classe do provedor de dados .NET Parameter .Parameters are mapped to the current row through the SourceColumn and SourceVersion properties of a .NET data provider's Parameter class. SourceColumn refere-se a uma DataTable coluna que as DataAdapter referências obtêm valores de parâmetro para a linha atual.SourceColumn refers to a DataTable column that the DataAdapter references to obtain parameter values for the current row.

SourceColumn refere-se ao nome da coluna não mapeado antes da aplicação de qualquer mapeamento de tabela.SourceColumn refers to the unmapped column name before any table mappings have been applied. Caso SourceColumn refira-se a uma coluna inexistente, a ação tomada depende de um dos valores MissingMappingAction a seguir.If SourceColumn refers to a nonexistent column, the action taken depends on one of the following MissingMappingAction values.

Valor de enumeraçãoEnumeration value Ação executadaAction taken
MissingMappingAction.Passthrough Use os nomes de coluna de fonte e os nomes de tabela no DataSet caso nenhum mapeamento esteja presente.Use the source column names and table names in the DataSet if no mapping is present.
MissingMappingAction.Ignore Um SystemException é gerado.A SystemException is generated. Quando os mapeamentos são definidos explicitamente, um mapeamento ausente para um parâmetro de entrada geralmente é o resultado de um erro.When the mappings are explicitly set, a missing mapping for an input parameter is usually the result of an error.
MissingMappingAction.Error Um SystemException é gerado.A SystemException is generated.

A propriedade SourceColumn também é usada para remapear o valor para parâmetros de saída ou de entrada/saída para o DataSet.The SourceColumn property is also used to map the value for output or input/output parameters back to the DataSet. Uma exceção será gerada se fizer referência a uma coluna inexistente.An exception is generated if it refers to a nonexistent column.

A SourceVersion propriedade de uma classe do provedor de dados .NET Parameter determina se a versão original, atual ou proposta do valor da coluna deve ser usada.The SourceVersion property of a .NET data provider's Parameter class determines whether to use the Original, Current, or Proposed version of the column value. Esse recurso é frequentemente usado para incluir valores originais na cláusula WHERE de uma instrução UPDATE para verificar violações de simultaneidade otimistas.This capability is often used to include original values in the WHERE clause of an UPDATE statement to check for optimistic concurrency violations.

Chamar o AcceptChanges método ou o AcceptChanges método confirmará todas as alterações no DataSet ou no DataTable .Calling the AcceptChanges method or AcceptChanges method will commit all changes in the DataSet or DataTable. Se um desses métodos for chamado antes de o Update método ser chamado, nenhuma alteração será confirmada quando o Update método for chamado, a menos que outras alterações tenham sido feitas desde AcceptChanges ou AcceptChanges foi chamado.If either of these methods are called before the Update method is called, no changes will be committed when the Update method is called, unless further changes have been made since AcceptChanges or AcceptChanges was called.

Observação

Caso ocorra um erro durante a atualização de uma linha, uma exceção é lançada e a execução da atualização é descontinuada.If an error occurs while updating a row, an exception is thrown and execution of the update is discontinued. Para continuar a operação de atualização sem gerar exceções quando um erro é encontrado, defina a propriedade ContinueUpdateOnError como true antes de chamar Update.To continue the update operation without generating exceptions when an error is encountered, set the ContinueUpdateOnError property to true before calling Update. Você também pode responder a erros linha por linha dentro do evento RowUpdated de um DataAdapter.You may also respond to errors on a per-row basis within the RowUpdated event of a DataAdapter. Para continuar a operação de atualização sem gerar uma exceção dentro evento RowUpdated, defina a propriedade Status do RowUpdatedEventArgs como Continue.To continue the update operation without generating an exception within the RowUpdated event, set the Status property of the RowUpdatedEventArgs to Continue.

Para cada coluna que você propaga para a fonte de dados em Update , um parâmetro deve ser adicionado ao InsertCommand , UpdateCommand ou DeleteCommand .For every column that you propagate to the data source on Update, a parameter should be added to the InsertCommand, UpdateCommand, or DeleteCommand. A SourceColumn Propriedade do parâmetro deve ser definida como o nome da coluna.The SourceColumn property of the parameter should be set to the name of the column. Essa configuração indica que o valor do parâmetro não é definido manualmente, mas é tirado da coluna específica na linha processada atualmente.This setting indicates that the value of the parameter is not set manually, but is taken from the particular column in the currently processed row.

Aplica-se a