Compartilhar via


Como: Atualizar dados usando um TableAdapter

Após os dados no seu DataSet terem sido modificados e validados, você provavelmente desejará enviar os dados atualizados de volta a um banco de dados.Para enviar os dados modificados a um banco de dados, você chama o método Update de um TableAdapter.O método Update do adaptador atualizará uma única tabela de dados e executará o comando correto (INSERT, UPDATE ou DELETE) com base no RowState de cada linha de dados na tabela.Quando você salva dados em tabelas relacionadas, Visual Studio 2008 fornece um novo componente TableAdapterManager que auxilia a salvar na ordem correta com base nas restrições de chave externa definidas no banco de dados.Para obter mais informações, consulte Visão geral sobre atualização hierárquica.

Observação:

Porque tentativa de para atualização uma fonte de dados com o Sumário de um dataset pode causa erros, você deve colocar o código que chama o adaptador Update método dentro de um try/catch bloco.

O procedimento exato para atualizar uma fonte de dados pode variar dependendo de suas necessidades comerciais, mas seu aplicativo deve incluir as seguintes etapas:

  1. Chamar o método Update do adaptador em um bloco try/catch.

  2. Se uma exceção é detectada, localize a linha de dados que causou o erro.Para obter mais informações, consulte Como: Localizar linhas com erros.

  3. Reconcilie o problema na linha de dados (programaticamente se você puder, ou apresentando a linha inválida para o usuário para modificação) e em seguida, tente novamente a atualização (HasErrors,GetErrors).

Salvar dados em um banco de dados

Chame o método Update de um TableAdapter, passando o nome da tabela de dados que contém os valores a serem gravados no banco de dados.

Para atualizar um banco de dados que possui um dataset usando um TableAdapter

  • Coloque o método Update do adaptador em um bloco try/catch.O exemplo a seguir mostra como tentar executar uma atualização de dentro de um bloco try/catch com o conteúdo da tabela Customers no NorthwindDataSet.

    Try
        Me.Validate()
        Me.CustomersBindingSource.EndEdit()
        Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
        MsgBox("Update successful")
    
    Catch ex As Exception
        MsgBox("Update failed")
    End Try
    
    try
    {
        this.Validate();
        this.customersBindingSource.EndEdit();
        this.customersTableAdapter.Update(this.northwindDataSet.Customers);
        MessageBox.Show("Update successful");
    }
    catch (System.Exception ex)
    {
        MessageBox.Show("Update failed");
    }
    

Atualizando duas tabelas relacionadas em um DataSet com um TableAdapter

Ao atualizar tabelas relacionadas em um DataSet, você deve atualizar na sequência apropriada a fim de reduzir a possibilidade de violar restrições de integridade referenciais.A ordem de execução do comando também seguirão os índices de DataRowCollection no DataSet.Para evitar que erros de integridade de dados sejam aumentados, a prática recomendada é atualizar o banco de dados na sequência a seguir:

  1. Tabela filho: exclua registros.

  2. Tabela pai: Inserir, atualização e excluir registros.

  3. Tabela filho: Inserir e atualizar registros.

    Observação:

    Se você estiver atualizando duas ou mais tabelas relacionadas , Você deve incluir toda a lógica de atualização dentro de uma transação.Uma transação é um processo que garante todas as alterações relacionadas a um banco de dados terão êxito antes de confirmar as alterações.Para obter mais informações , Consulte Performing Transactions.

Para atualizar duas tabelas relacionadas utilizando um TableAdapter

  1. Crie três tabelas de dados temporário para conter os registros diferentes.

  2. Chame o método Update para cada subconjunto de linhas de um bloco try/catch.Se ocorrerem erros de atualização, você deve discriminá-los e resolvê-los.

  3. Confirmar as alterações para o banco de dados.

  4. Descarte as tabelas de dados temporários para liberar os recursos.

    O exemplo a seguir mostra como atualizar uma fonte de dados com um DataSet que contém tabelas relacionadas.

    Private Sub UpdateDB()
        Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable = _
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
        Dim newChildRecords As NorthwindDataSet.OrdersDataTable = _
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
        Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable = _
            CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
        Try
            If deletedChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(deletedChildRecords)
            End If
    
            CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
            If newChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(newChildRecords)
            End If
    
            If modifiedChildRecords IsNot Nothing Then
                OrdersTableAdapter.Update(modifiedChildRecords)
            End If
    
            NorthwindDataSet.AcceptChanges()
    
        Catch ex As Exception
            MessageBox.Show("An error occurred during the update process")
            ' Add code to handle error here.
    
        Finally
            If deletedChildRecords IsNot Nothing Then
                deletedChildRecords.Dispose()
            End If
    
            If newChildRecords IsNot Nothing Then
                newChildRecords.Dispose()
            End If
    
            If modifiedChildRecords IsNot Nothing Then
                modifiedChildRecords.Dispose()
            End If
    
        End Try
    End Sub
    
    void UpdateDB()
    {
        NorthwindDataSet.OrdersDataTable deletedChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
        NorthwindDataSet.OrdersDataTable newChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
        NorthwindDataSet.OrdersDataTable modifiedChildRecords = 
            (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
        try
        {
            if (deletedChildRecords != null)
            {
                ordersTableAdapter.Update(deletedChildRecords);
            }
    
            customersTableAdapter.Update(northwindDataSet.Customers);
    
            if (newChildRecords != null)
            {
                ordersTableAdapter.Update(newChildRecords);
            }
    
            if (modifiedChildRecords != null)
            {
                ordersTableAdapter.Update(modifiedChildRecords);
            }
    
            northwindDataSet.AcceptChanges();
        }
    
        catch (Exception ex)
        {
            MessageBox.Show("An error occurred during the update process");
            // Add code to handle error here.
        }
    
        finally
        {
            if (deletedChildRecords != null)
            {
                deletedChildRecords.Dispose();
            }
            if (newChildRecords != null)
            {
                newChildRecords.Dispose();
            }
            if (modifiedChildRecords != null)
            {
                modifiedChildRecords.Dispose();
            }
        }
    }
    

Consulte também

Conceitos

Visão geral do TableAdapter

Exibindo visão geral de dados

Outros recursos

Explicações Passo a passo sobre Dados

Conectando-se a Dados no Visual Studio

Preparando seu aplicativo para receber dados

Buscando dados em seu aplicativo

Exibindo dados em formulários em aplicativos do Windows

Editar dados no seu aplicativo

Validando Dados

Salvando dados