Passo a passo: Salvando dados em um banco de dados (várias tabelas)

Uma dos cenários mais comuns no desenvolvimento de aplicativos é exibir dados em um formulário em um aplicativo do Windows, editar os dados e enviar os dados atualizados de volta para o banco de dados.Esta explicação passo a passo cria um formulário que exibe dados de duas tabelas relacionadas e mostra como editar registros e salvar alterações de volta para o banco de dados.Esse exemplo usa as tabelas Customers e Orders do banco de dados de amostra Northwind.

Você pode salvar dados em seu aplicativo de volta para o banco de dados chamando o método Update de um TableAdapter.Quando você arrastar itens da janela Data Sources, código para salvar dados será automaticamente adicionado para a primeira tabela arrastada em um formulário.Quaisquer tabelas adicionais adicionadas a um formulário exigem a inclusão manual de código necessário para salvar dados.Esta explicação passo a passo mostra como adicionar código para salvar atualizações de mais de uma tabela.

ObservaçãoObservação

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu.Para obter mais informações, consulte Configurações de Visual Studio.

As tarefas ilustradas neste passo a passo incluem:

Pré-requisitos

A fim de concluir este explicação passo a passo, será necessário:

Criando o aplicativo Windows

A primeira etapa é criar um Windows Application.Atribuir um nome para o projeto é opcional nesta etapa mas nós daremos um nome porque nós estamos planejando salvá-lo posteriormente.

Para criar o novo projeto do Windows Application

  1. No menu File, crie um novo projeto.

  2. Nomeie o projeto como UpdateMultipleTablesWalkthrough.

  3. Selecione Windows Application e clique em OK.Para obter mais informações, consulte Desenvolvendo aplicativos clientes.

    O projeto UpdateMultipleTablesWalkthrough é criado e adicionado ao Solution Explorer.

Criando o DataSet

Essa etapa cria uma fonte de dados do banco de dados Northwind usando o Data Source Configuration Wizard.Você deve ter acesso ao banco de dados de exemplos Northwind para criar a conexão.Para obter informações sobre como configurar o banco de dados de exemplo Northwind, consulte Como: instalar bancos de dados de amostra.

Para criar o DataSet

  1. No menu Data, clique em Show Data Sources.

  2. Na janela Data Sources, clique em Add New Data Source para iniciar o Data Source Configuration Wizard.

  3. Selecione Database na página Choose a Data Source Type, e clique Next.

  4. Na página Choose your Data Connection siga um destes procedimentos:

    • Se uma conexão de dados para o banco de dados de exemplo Northwind estiver disponível na lista drop-down, selecione-o.

      - ou -

    • Selecione New Connection para abrir a caixa de diálogo Add/Modify Connection.Para obter mais informações, consulte Adicionar/modificar a caixa de diálogo de conexão (geral).

  5. Se seu banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais, e clique Next.

  6. Clique Next na página Save connection string to the Application Configuration file.

  7. Expanda o nó Tables na página Choose your Database Objects.

  8. Selecione as tabelas Customers e Orders, e clique Finish.

    O NorthwindDataSeté adicionado ao seu projeto e as tabelas aparecem na janela Data Sources.

Definindo os controles a serem criados

Para esta explicação passo a passo os dados na tabela Customers estarão num layout Details onde os dados são exibidos em controles individuais.Os dados da tabela Orders estarão em um layout Grid exibido em um controle DataGridView.

Para definir o tipo subjacente para os itens na janela fontes de dados

  1. Expanda o nó Customers na janela Data Sources.

  2. Alterar o controle da tabela Customers para controles individuais selecionando Details na lista de controle no nó Customers.Para obter mais informações, consulte Como: definir o controle a ser criado ao arrastar da janela Data Sources.

Criando o formulário vinculado a dados

Você pode criar os controles com dados vinculados, arrastando itens da janela Data Sources para seu formulário.

Para criar controles vinculado a dados no formulário

  1. Arraste o nó principal Customers da janela Data Sources no Form1.

    Controles vinculados a dados com rótulos descritivos aparecem no formulário, juntamente com uma faixa de ferramenta (BindingNavigator) para navegação em registros.Um NorthwindDataSet,CustomersTableAdapter, BindingSource e BindingNavigator aparecem na bandeja de componentes.

  2. Arraste o nó Orders relacionado da janela Data Sources para o Form1.

    ObservaçãoObservação

    O nó relacionado a Orders está localizado abaixo da coluna Fax e é um nó filho do nó Customers.

    Um controle DataGridView e uma faixa de ferramenta (BindingNavigator) para navegação em registros aparecem no formulário.Um OrdersTableAdapter e BindingSource aparecem na bandeja de componentes.

Adicionando código para atualizar o banco de dados

Você pode atualizar o banco de dados chamando os métodos Update dos TableAdapters de Customers e Orders.Por padrão, um manipulador de eventos para o botão Save do BindingNavigator é adicionado ao código do formulário para enviar atualizações ao banco de dados.Este procedimento modifica esse código para enviar atualizações na ordem correta para eliminar a possibilidade de haver erros de integridade referencial.O código também implementa manipulação de erro através da quebra da chamada de atualização em uma tentativa-bloco catch.Você pode modificar o código para atender às necessidades do seu aplicativo.

ObservaçãoObservação

Para maior clareza esta explicação passo a passo não usa uma transação, mas se você estiver atualizando duas ou mais tabelas relacionadas, então você deve incluir toda a lógica de atualização dentro de uma transação.Uma transação é um processo que garante que 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 adicionar lógica de atualização para o aplicativo

  1. Clique duas vezes no botão na Save em BindingNavigator para abrir o editor de código para o manipulador de eventos bindingNavigatorSaveItem_Click.

  2. Substitua o código no manipulador de eventos para chamar os métodos Update dos TableAdapters relacionados.O código a seguir primeiramente cria três tabelas de dados temporárias para armazenar as informações atualizadas para cada DataRowState (Deleted, Added e Modified).Então atualizações são executadas na ordem apropriada.O código deve se parecer com o seguinte:

    Me.Validate()
    Me.OrdersBindingSource.EndEdit()
    Me.CustomersBindingSource.EndEdit()
    
    Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType(
        NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
    Dim newOrders As NorthwindDataSet.OrdersDataTable = CType(
        NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
    Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType(
        NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
    
    Try
        ' Remove all deleted orders from the Orders table.
        If Not deletedOrders Is Nothing Then
            OrdersTableAdapter.Update(deletedOrders)
        End If
    
        ' Update the Customers table.
        CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
        ' Add new orders to the Orders table.
        If Not newOrders Is Nothing Then
            OrdersTableAdapter.Update(newOrders)
        End If
    
        ' Update all modified Orders.
        If Not modifiedOrders Is Nothing Then
            OrdersTableAdapter.Update(modifiedOrders)
        End If
    
        NorthwindDataSet.AcceptChanges()
    
    Catch ex As Exception
        MsgBox("Update failed")
    
    Finally
        If Not deletedOrders Is Nothing Then
            deletedOrders.Dispose()
        End If
    
        If Not newOrders Is Nothing Then
            newOrders.Dispose()
        End If
    
        If Not modifiedOrders Is Nothing Then
            modifiedOrders.Dispose()
        End If
    End Try
    
    this.Validate();
    this.ordersBindingSource.EndEdit();
    this.customersBindingSource.EndEdit();
    
    NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable)
        northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
    NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable)
        northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
    NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable)
        northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
    try
    {
        // Remove all deleted orders from the Orders table.
        if (deletedOrders != null)
        {
            ordersTableAdapter.Update(deletedOrders);
        }
    
        // Update the Customers table.
        customersTableAdapter.Update(northwindDataSet.Customers);
    
        // Add new orders to the Orders table.
        if (newOrders != null)
        {
            ordersTableAdapter.Update(newOrders);
        }
    
        // Update all modified Orders.
        if (modifiedOrders != null)
        {
            ordersTableAdapter.Update(modifiedOrders);
        }
    
        northwindDataSet.AcceptChanges();
    }
    
    catch (System.Exception ex)
    {
        MessageBox.Show("Update failed");
    }
    
    finally
    {
        if (deletedOrders != null)
        {
            deletedOrders.Dispose();
        }
        if (newOrders != null)
        {
            newOrders.Dispose();
        }
        if (modifiedOrders != null)
        {
            modifiedOrders.Dispose();
        }
    }
    

Testando o aplicativo

Para testar o aplicativo

  1. Pressione F5.

  2. Faça algumas alterações em dados em um ou mais registros em cada tabela.

  3. Pressione o botão Save.

  4. Verifique os valores no banco de dados para verificar se as alterações foram salvas.

Próximas etapas

Dependendo dos seus requisitos de aplicativo há várias etapas que você pode desejar executar após criar um formulário vinculado a dados no seu aplicativo do Windows.Alguns aprimoramentos que você poderia fazer a essa explicação passo a passo incluem:

Consulte também

Conceitos

Novidades para desenvolvimento de aplicativos de dados no Visual Studio 2012

Vinculando controles do Windows Forms a dados em Visual Studio

Preparando seu aplicativo para receber dados

Buscando dados em seu aplicativo.

Controles de vinculação de dados de Visual Studio

Edição de dados em seu aplicativo.

Validação de dados

Salvar dados

Outros recursos

Explicações passo a passo de dados

Visão geral dos aplicativos de dados em Visual Studio

Connecting to Data in Visual Studio