Compartilhar via


Instruções passo a passo: salvando dados em um banco de dados (várias tabelas)

Um dos cenários mais comuns no desenvolvimento de aplicativos é exibir dados de um formulário em um aplicativo do Windows, editar e enviá-los atualizados de volta para o banco de dados. Essa 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 no banco de dados. Este exemplo usa as tabelas Customers e Orders do banco de dados de exemplo Northwind.

Você pode salvar os dados em seu aplicativo de volta no banco de dados chamando o método Update de um TableAdapter. Ao arrastar itens da janela Fontes de Dados, o código para salvar dados é adicionado automaticamente para a primeira tabela arrastada para um formulário. Qualquer tabela adicional adicionada a um formulário exige a adição manual de qualquer código necessário para salvar dados. Essa explicação passo a passo mostra como adicionar código para salvar atualizações de mais de uma tabela.

Dica

As caixas de diálogo e os comandos de menu que você vê podem ser diferentes dos descritos na Ajuda, dependendo da sua edição ou das configurações ativas.Para alterar as configurações, escolha Importar e Exportar Configurações no menu Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

As tarefas ilustradas neste passo a passo incluem:

Pré-requisitos

Para concluir este passo a passo, você precisará de:

Criando o aplicativo do Windows

A primeira etapa é criar um Aplicativo do Windows. A atribuição de um nome ao projeto é opcional nesta etapa, mas daremos um nome a ele porque pretendemos salvá-lo posteriormente.

Para criar o novo projeto de Aplicativo do Windows

  1. No menu Arquivo, crie um novo projeto.

  2. Nomeie o projeto UpdateMultipleTablesWalkthrough.

  3. Selecione Aplicativo do Windows e clique em OK. Para obter mais informações, consulte Implementando aplicativos cliente com o .NET Framework.

    O projeto UpdateMultipleTablesWalkthrough é criado e adicionado ao Gerenciador de Soluções.

Criando a Fonte de Dados

Esta etapa cria uma fonte de dados a partir de um banco de dados Northwind usando o Assistente de Configuração de Fonte de Dados. É preciso ter acesso ao banco de dados de exemplo 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 exemplo.

Para criar a fonte de dados

  1. No menu Dados, clique em Mostrar Fontes de Dados.

  2. Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados para iniciar o Assistente de Configuração de Fonte de Dados.

  3. Selecione Base de dados na página Escolher um Tipo de Fonte de Dados e, em seguida, clique em Próximo.

  4. Sobre o Escolha sua conexão de dados página faça o seguinte:

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

      -ou-

    • Selecione nova conexão para abrir o Adicionar/Modificar conexão caixa de diálogo.

  5. Se o banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais e, em seguida, clique em Próximo.

  6. Clique em Avançar na página Salvar cadeia de caracteres de conexão no arquivo de configuração do aplicativo.

  7. Expanda o nó Tabelas na página Escolher Objetos do Banco de Dados.

  8. Selecione as tabelas Customers e Orders e, em seguida, clique em Finalizar.

    O NorthwindDataSet é adicionado ao projeto e as tabelas são exibidas na janela Fontes de Dados.

Configurando os controles a serem criados

Para esta explicação passo a passo, os dados na tabela Customers estarão no layout Detalhes em que dados são exibidos em controles individuais. Os dados da tabela Orders estarão no layout Grade exibidos em um controle DataGridView.

Definir o tipo de remoção dos itens na Janela Fontes de Dados

  1. Expanda o nó Clientes na janela Fontes de Dados.

  2. Altere o controle da tabela Clientes para controles individuais selecionando Detalhes na lista de controle no nó Clientes. Para obter mais informações, consulte Como definir o controle a ser criado quando arrastado da janela Fontes de Dados.

Criando o formulário de associação de dados

Você pode criar controles de associação de dados arrastando itens da janela Fontes de Dados para um formulário.

Para criar controles de associação de dados no formulário

  1. Arraste o nó principal Clientes da janela Fontes de Dados para Form1.

    Os controles de associação de dados com rótulos descritivos são exibidos no formulário, juntamente com uma faixa de ferramentas (BindingNavigator) para registros de navegação. Um NorthwindDataSet, CustomersTableAdapter, BindingSource e BindingNavigator são exibidos na bandeja de componentes.

  2. Arraste o nó Ordens relacionado da janela Fontes de Dados para Form1.

    Dica

    O nó Ordens relacionado está localizado abaixo da coluna Fax e é um nó filho do nó Clientes.

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

Adicionando código para atualizar o banco de dados

É possível atualizar os bancos de dados chamando os métodos Update dos TableAdapters Clientes e Ordens. Por padrão, um manipulador de eventos para o botão BindingNavigatorSalvar do é adicionado ao código do formulário para enviar atualizações para o banco de dados. Esse procedimento modifica esse código para enviar atualizações na ordem adequada para eliminar a possibilidade de gerar erros de integridade referencial. O código também implementa manipulação de erros com a quebra automática da chamada de atualização em um bloco try-catch. Você pode mudar o código para atender às necessidades do seu aplicativo.

Dica

Para maior clareza, esta explicação passo a passo não usa uma transação, porém, se estiver atualizando duas ou mais tabelas relacionadas, será melhor 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 a um banco de dados são bem-sucedidas antes de aplicar qualquer alteração.Para obter mais informações, consulte Transações e simultaneidade.

Para adicionar lógica de atualização ao aplicativo

  1. Clique duas vezes no botão Salvar no BindingNavigator para abrir o Editor de Códigos 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 primeiro cria três tabelas de dados temporárias para armazenar as informações de cada DataRowState (Deleted, Added e Modified). Em seguida, as atualizações são executadas na ordem adequada. 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 nos dados de um ou mais registros em cada tabela.

  3. Pressione o botão Salvar.

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

Próximas etapas

Dependendo dos requisitos de aplicativo, existem várias etapas que você talvez queira realizar após criar um formulário de associação de dados no aplicativo do Windows. Entre algumas das melhorias que você poderia fazer nessa explicação passo a passo estão:

Consulte também

Conceitos

Associando controles dos Windows Forms a dados no Visual Studio

Preparando o aplicativo para receber dados

Buscando dados no aplicativo

Associando controles a dados no Visual Studio

Editando dados no aplicativo

Validando dados

Salvando dados

Outros recursos

Instruções passo a passo de dados

Visão geral de aplicativos de dados no Visual Studio

Conectando a dados no Visual Studio