Partilhar via


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 especificado DataSet de uma DataTable "Tabela".

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public virtual int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
public abstract int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
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.

Retornos

O número de linhas atualizadas com êxito do DataSet.

Implementações

Atributos

Exceções

A tabela de origem é inválida.

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

Exemplos

O exemplo a seguir usa a classe derivada, OleDbDataAdapterpara 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

Comentários

A atualização é executada por linha. Para cada linha inserida, modificada e excluída, o Update método determina o tipo de alteração que foi executada nela (Inserir, Atualizar ou Excluir). Dependendo do tipo de alteração, o InsertUpdate, modelo de comando ou Delete de comando é executado para propagar a linha modificada para a fonte de dados. Quando um aplicativo chama o Update método, ele 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. Por exemplo, Update pode executar uma instrução DELETE, seguida por uma instrução INSERT e, em seguida, outra instrução DELETE, devido à ordenação das linhas no DataTable.

Observe que essas instruções não são executadas como um processo em lote; cada linha é atualizada individualmente. 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, INSERT antes de UPDATE). Para obter mais informações, consulte Atualizando fontes de dados com DataAdapters.

Se as instruções INSERT, UPDATE ou DELETE não tiverem sido especificadas, o Update método gerará uma exceção. No entanto, você pode criar um objeto ou OleDbCommandBuilder um SqlCommandBuilder objeto para gerar automaticamente instruções SQL para atualizações de tabela única se definir a SelectCommand propriedade de um provedor de dados do .NET Framework. Em seguida, quaisquer instruções SQL adicionais que você não definir são geradas pelo CommandBuilder. Essa lógica de geração requer que as informações da coluna de chave estejam presentes no DataSet. Para obter mais informações, consulte Gerando comandos com CommandBuilders.

O Update método recupera linhas da tabela listada no primeiro mapeamento antes de executar uma atualização. Em Update seguida, atualiza a linha usando o valor da UpdatedRowSource propriedade. Todas as linhas adicionais retornadas são ignoradas.

Depois que os dados forem carregados novamente no DataSetevento, o OnRowUpdated evento será gerado, permitindo que o usuário inspecione a linha reconciliada DataSet e quaisquer parâmetros de saída retornados pelo comando. Depois que uma linha é atualizada com êxito, as alterações nessa linha são aceitas.

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

  1. Os valores no são DataRow movidos para os valores de parâmetro.

  2. O evento OnRowUpdating foi acionado.

  3. O comando é executado.

  4. Se o comando estiver definido como FirstReturnedRecord, o primeiro resultado retornado será colocado no DataRow.

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

  6. O evento OnRowUpdated foi acionado.

  7. DataRow.AcceptChanges é invocado. Isso gerará eventos e DataTable.RowChanged eventos DataTable.RowChanging para o atualizadoDataRow.

Cada comando associado ao DataAdapter geralmente tem uma coleção de parâmetros associada a ele. Os parâmetros são mapeados para a linha atual por meio das propriedades e SourceVersion da SourceColumn classe de um provedor de dados .ParameterNET. SourceColumn refere-se a uma DataTable coluna que as DataAdapter referências para obter valores de parâmetro 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 fizer referência a uma coluna inexistente, a ação executada dependerá de um dos valores a seguir MissingMappingAction .

Valor de enumeração Ação executada
MissingMappingAction.Passthrough Use os nomes de coluna de origem e os nomes de tabela no DataSet se nenhum mapeamento estiver presente.
MissingMappingAction.Ignore Um SystemException é gerado. Quando os mapeamentos são definidos explicitamente, um mapeamento ausente para um parâmetro de entrada geralmente é o resultado de um erro.
MissingMappingAction.Error Um SystemException é gerado.

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

A SourceVersion propriedade da classe de um provedor de dados . Parameter NET determina se a versão original, atual ou proposta do valor da coluna deve ser usada. Essa funcionalidade geralmente é usada para incluir valores originais na cláusula WHERE de uma instrução UPDATE para verificar se há violações de simultaneidade otimistas.

Chamar o AcceptChanges método ou AcceptChanges método confirmará todas as alterações no DataSet ou DataTable. Se um desses métodos for chamado antes do Update método ser chamado, nenhuma alteração será confirmada quando o Update método for chamado, a menos que novas alterações tenham sido feitas desde AcceptChanges ou AcceptChanges que tenham sido chamadas.

Observação

Se ocorrer um erro durante a atualização de uma linha, uma exceção será gerada e a execução da atualização será descontinuada. Para continuar a operação de atualização sem gerar exceções quando um erro for encontrado, defina a ContinueUpdateOnError propriedade para true antes de chamar Update. Você também pode responder a erros por linha dentro do RowUpdated evento de um DataAdapter. Para continuar a operação de atualização sem gerar uma exceção dentro do RowUpdated evento, defina a Status propriedade como RowUpdatedEventArgsContinue.

Para cada coluna em que você propaga para a fonte Updatede dados, um parâmetro deve ser adicionado ao InsertCommand, UpdateCommandou DeleteCommand. A SourceColumn propriedade do parâmetro deve ser definida como o nome da coluna. Essa 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

Confira também