Partilhar via


Salvar dados em um banco de dados (várias tabelas) em aplicativos do .NET Framework

Observação

Os conjuntos de dados e as classes relacionadas são tecnologias herdadas do .NET Framework do início dos anos 2000 que permitem que os aplicativos trabalhem com dados na memória enquanto os aplicativos estão desconectados do banco de dados. As tecnologias são bastante úteis em aplicativos que permitem que os usuários modifiquem dados e persistam as alterações no banco de dados. Embora os conjuntos de dados tenham se mostrado uma tecnologia muito bem-sucedida, é recomendado que os novos aplicativos .NET usem o Entity Framework Core. O Entity Framework proporciona uma forma mais natural de trabalhar com dados tabulares como modelos de objeto e conta com uma interface de programação mais simples.

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. Quando você arrasta tabelas da janela Fontes de Dados para um formulário, o código necessário para salvar dados é adicionado automaticamente. Todas as tabelas adicionais adicionadas a um formulário exigem a adição manual desse código. Essa explicação passo a passo mostra como adicionar código para salvar atualizações de mais de uma tabela.

As tarefas ilustradas neste passo a passo incluem:

Pré-requisitos

Para concluir este passo a passo, você precisa das cargas de trabalho de Desenvolvimento de área de trabalho do .NET e Armazenamento de dados e processamento instaladas no Visual Studio. Para instalá-las, abra Instalador do Visual Studio e escolha Modificar (ou Mais>Modificar) ao lado da versão do Visual Studio que você deseja modificar. Confira Modificar o Visual Studio.

Este passo a passo usa o SQL Server Express LocalDB e o banco de dados de exemplo da Northwind.

  1. Se você não tiver SQL Server Express LocalDB, instale-o por meio da página de download do SQL Server Express ou usando o Instalador do Visual Studio. No Instalador do Visual Studio, você pode instalar o SQL Server Express LocalDB como parte da carga de trabalho Armazenamento e processamento de dados ou como um componente individual.

  2. Instale o banco de dados de exemplo da Northwind seguindo estas etapas:

    1. No Visual Studio, abra a janela Pesquisador de Objetos do SQL Server. (O Pesquisador de Objetos do SQL Server é instalado como parte da carga de trabalho Armazenamento e processamento de dados no Instalador do Visual Studio). Expanda o nó do SQL Server. Clique com o botão direito do mouse na instância do LocalDB e selecione Nova Consulta.

      Uma janela do editor de consultas vai se abrir.

    2. Copie o script Transact-SQL da Northwind para sua área de transferência. Esse script T-SQL cria o banco de dados da Northwind do zero e o preenche com alguns dados.

    3. Cole o script T-SQL no editor de consultas e, em seguida, escolha o botão Executar.

      Após um curto período, a consulta termina de ser executada e o banco de dados da Northwind é criado.

Criar o aplicativo do Windows Forms

Crie um projeto de Aplicativo do Windows Forms para C# ou Visual Basic. Nomeie o projeto UpdateMultipleTablesWalkthrough.

Criar a fonte de dados

Esta etapa cria uma fonte de dados com base em 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 da Northwind, consulte Como instalar bancos de dados de exemplo.

  1. No menu Dados, selecione Mostrar Fontes de Dados.

    A janela Fontes de Dados é aberta.

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

  3. Na tela Escolher um Tipo de Fonte de Dados, selecione Banco de Dados e, em seguida, Avançar.

  4. Na tela Escolha a Conexão de Dados, faça o seguinte:

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

      -ou-

    • Selecione Nova Conexão para abrir a caixa de diálogo Adicionar/Modificar Conexão.

  5. Se o banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais e, em seguida, selecione Avançar.

  6. Na tela Salvar cadeia de conexão no arquivo de Configuração de Aplicativo, selecione Avançar.

  7. Expanda o nó Tabelas na tela Escolher Objetos do Banco de Dados.

  8. Selecione as tabelas Clientes e Pedidos e, em seguida, selecione Finalizar.

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

Definir os controles a serem criados

Para este passo a passo, os dados na tabela Customers estão em um layout Detalhes onde os 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. Na janela Fontes de dados, expanda o nó Clientes.

  2. No nó Clientes, selecione Detalhes na lista de controle para alterar o controle da tabela Clientes para controles individuais. Para obter mais informações, consulte Definir o controle a ser criado quando arrastado da janela Fontes de Dados.

Criar o formulário associados a dados

Você pode criar controles de associação de dados arrastando itens da janela Fontes de Dados para um 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 aparecem na bandeja do componente.

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

    Observação

    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. OrdersTableAdapter e BindingSource aparecem na bandeja de componentes.

Adicionar 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 Salvar do BindingNavigator é adicionado ao código do formulário para enviar atualizações para o banco de dados. Este procedimento modifica o código para enviar atualizações na ordem correta. Isso elimina 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.

Observação

Para maior clareza, este passo a passo não usa uma transação. No entanto, se você estiver atualizando duas ou mais tabelas relacionadas, inclua 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 sejam bem-sucedidas antes que qualquer alteração seja confirmada. Para obter mais informações, consulte Transações e simultaneidade.

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

  1. Selecione o botão Salvar em BindingNavigator. Isso abre 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 primeiro cria três tabelas de dados temporárias para armazenar as informações de cada DataRowState (Deleted, Added e Modified). As atualizações são executadas na ordem correta. O código deve se parecer com o seguinte:

    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();
        }
    }
    

Testar o aplicativo

  1. Pressione F5.

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

  3. Selecione o botão Salvar.

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