DataAdapter.Update(DataSet) Método

Definição

Chama as respetivas instruções INSERT, UPDATE ou DELETE para cada linha inserida, atualizada ou eliminada na especificada DataSet a partir de uma DataTable "Tabela" nomeada.

public:
 abstract int Update(System::Data::DataSet ^ dataSet);
public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public abstract int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
Public MustOverride Function Update (dataSet As DataSet) As Integer
Public Overridable Function Update (dataSet As DataSet) As Integer

Parâmetros

dataSet
DataSet

É DataSet usado para atualizar a fonte de dados.

Devoluções

O número de linhas atualizado com sucesso a partir do DataSetarquivo .

Implementações

Exceções

A tabela de origem é inválida.

Uma tentativa de executar uma instrução INSERT, UPDATE ou DELETE resultou em zero registos afetados.

Exemplos

O exemplo seguinte utiliza a classe derivada, OleDbDataAdapter, para Update a fonte de dados.

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

Observações

A atualização é feita por linhas. Para cada linha inserida, modificada e eliminada, o Update método determina o tipo de alteração que foi realizada nela (Inserir, Atualizar ou Eliminar). Dependendo do tipo de alteração, o Inserttemplate de comando , Update, ou Delete o comando é executado para propagar a linha modificada para a fonte de dados. Quando uma aplicação chama o Update método, examina DataAdapter a RowState propriedade e executa iterativamente as instruções INSERT, UPDATE ou DELETE exigidas para cada linha, com base na ordem dos índices configurados no DataSet. Por exemplo, Update pode executar uma instrução DELETE, seguida de uma instrução INSERT, e depois outra instrução DELETE, devido à ordem das linhas no DataTable.

Deve notar-se que estas declarações não são realizadas como um processo em lote; Cada linha é atualizada individualmente. Uma aplicação pode chamar o GetChanges método em situações em que deve controlar a sequência dos tipos de instruções (por exemplo, INSERT antes do UPDATE). Para obter mais informações, consulte Atualizando fontes de dados com DataAdapters.

Se as instruções INSERT, UPDATE ou DELETE não forem especificadas, o Update método gera uma exceção. No entanto, pode criar um objeto SqlCommandBuilder ou OleDbCommandBuilder para gerar automaticamente instruções SQL para atualizações de tabela única se definir a propriedade SelectCommand de um fornecedor de dados .NET Framework. Depois, quaisquer instruções SQL adicionais que não definas são geradas pelo CommandBuilder. Esta lógica de geração exige que a informação da coluna chave esteja presente no DataSet. Para mais informações, consulte Geração de Comandos com CommandBuilders.

O Update método recupera linhas da tabela listada no primeiro mapeamento antes de realizar uma atualização. Depois Update atualiza a linha usando o valor da UpdatedRowSource propriedade. Quaisquer linhas adicionais devolvidas são ignoradas.

Depois de qualquer dado ser carregado novamente no DataSet, o OnRowUpdated evento é levantado, permitindo ao utilizador inspecionar a linha reconciliada DataSet e quaisquer parâmetros de saída devolvidos pelo comando. Depois de uma linha ser atualizada com sucesso, as alterações a essa linha são aceites.

Ao usar Update, a ordem de execução é a seguinte:

  1. Os valores em são DataRow movidos para os valores dos parâmetros.

  2. O evento OnRowUpdating é acionado.

  3. A ordem é executada.

  4. Se o comando for definido para FirstReturnedRecord, então o primeiro resultado devolvido é colocado no DataRow.

  5. Se existirem parâmetros de saída, eles são colocados no DataRow.

  6. O evento OnRowUpdated é acionado.

  7. DataRow.AcceptChanges é invocado. Isto irá aumentar tanto os DataTable.RowChanging eventos como DataTable.RowChanged para a atualização DataRow.

Cada comando associado ao DataAdapter geralmente tem uma coleção de parâmetros associada. Os parâmetros são mapeados para a linha atual através das propriedades SourceColumn e SourceVersion da classe Parameter de um fornecedor de dados .NET. SourceColumn refere-se a uma DataTable coluna que a DataAdapter referência para obter valores de parâmetros para a linha atual.

SourceColumn refere-se ao nome da coluna não mapeada antes de qualquer mapeamento de tabela ter sido aplicado. Se SourceColumn se referir a uma coluna inexistente, a ação tomada depende de um dos seguintes MissingMappingAction valores.

Valor de enumeração Medidas tomadas
MissingMappingAction.Passthrough Use os nomes das colunas de origem e os nomes das tabelas se DataSet não houver mapeamento presente.
MissingMappingAction.Ignore A SystemException é gerado. Quando os mapeamentos são explicitamente definidos, um mapeamento em falta para um parâmetro de entrada é geralmente resultado de um erro.
MissingMappingAction.Error A SystemException é gerado.

A SourceColumn propriedade também é usada para mapear o valor dos parâmetros de saída ou entrada/saída de volta ao DataSet. É gerada uma exceção se se referir a uma coluna inexistente.

A propriedade SourceVersion da classe Parameter de um fornecedor de dados .NET determina se deve usar a versão Original, Atual ou Proposta do valor da coluna. Esta capacidade é frequentemente usada para incluir valores originais na cláusula WHERE de uma instrução UPDATE para verificar violações de concorrência otimista.

Chamar o método ou AcceptChanges método irá comprometer todas as alterações em ou DataTableDataSet .AcceptChanges Se algum destes métodos for chamado antes de o Update método ser chamado, não serão feitas alterações quando o Update método for chamado, a menos que tenham sido feitas alterações adicionais desde AcceptChanges ou AcceptChanges foi chamado.

Note

Se ocorrer um erro durante a atualização de uma linha, é lançada uma exceção e a execução da atualização é descontinuada. Para continuar a operação de atualização sem gerar exceções quando é encontrado um erro, defina a ContinueUpdateOnError propriedade para true antes de chamar Update. Também pode responder a erros por linha no RowUpdated caso de um DataAdapter. Para continuar a operação de atualização sem gerar uma exceção dentro do RowUpdated evento, defina a Status propriedade do RowUpdatedEventArgs para Continue.

Para cada coluna que propaga para a fonte de dados em Update, um parâmetro deve ser adicionado ao InsertCommand, UpdateCommand, ou DeleteCommand. A SourceColumn propriedade do parâmetro deve ser definida para o nome da coluna. Esta configuração indica que o valor do parâmetro não é definido manualmente, mas é retirado da coluna específica na linha atualmente processada.

Aplica-se a

Ver também