Partilhar via


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

Observação

A DataSet classe 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 especialmente úteis para aplicativos que permitem aos usuários modificar dados e manter as alterações de volta ao banco de dados. Embora os conjuntos de dados sejam uma tecnologia comprovadamente bem-sucedida, a abordagem recomendada para novos aplicativos .NET é usar o Entity Framework Core. O Entity Framework fornece uma maneira mais natural de trabalhar com dados tabulares como modelos de objeto e tem uma interface de programação mais simples.

Um 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. Este 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 no banco de dados. Este exemplo usa as tabelas Customers e Orders do banco de dados de exemplo Northwind.

Você pode salvar dados do seu aplicativo 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. Quaisquer tabelas adicionais adicionadas a um formulário requerem a adição manual deste código. Este 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 tutorial, você precisa do desenvolvimento da área de trabalho .NET e das cargas de trabalho de armazenamento e processamento de dados instaladas no Visual Studio. Para instalá-los, abra Visual Studio Installer e escolha Modificar (ou Mais>Modificar) ao lado da versão do Visual Studio que você deseja modificar. Consulte Modificar o Visual Studio.

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

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

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

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

      Uma janela do editor de consultas é aberta.

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

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

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

Criar o aplicativo Windows Forms

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

Criar a fonte de dados

Esta etapa cria uma fonte de dados do banco de dados Northwind usando o Assistente de Configuração da Fonte de Dados. Você deve 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.

  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 da Fonte de Dados.

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

  4. Na tela Escolha sua conexão de dados , siga um destes procedimentos:

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

      -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 selecione Avançar.

  6. Em Salvar cadeia de conexão no arquivo de configuração do aplicativo, selecione Avançar.

  7. Na ecrã Escolha os seus Objetos de Base de Dados, expanda o nó Tabelas.

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

    O NorthwindDataSet é adicionado ao seu projeto e as tabelas aparecem na janela Fontes de dados .

Definir os controles a serem criados

Para este passo a passo, os dados na Customers tabela estão no layout de Detalhes, onde os dados são exibidos em controles individuais. Os dados da Orders tabela estão em um layout de grelha que é exibido em um DataGridView controlo.

Para definir o tipo de descarte para os 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 controlo da tabela Clientes para controlos individuais. Para obter mais informações, consulte Definir o controle a ser criado ao arrastar da janela Fontes de dados.

Criar o formulário ligado a dados

Você pode criar os controles associados a dados arrastando itens da janela Fontes de Dados para o formulário.

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

    Controles ligados a dados com rótulos descritivos aparecem no formulário, juntamente com uma faixa de ferramentas (BindingNavigator) para navegar nos registros. Os componentes NorthwindDataSet, CustomersTableAdapter, BindingSource, e BindingNavigator aparecem na bandeja.

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

    Observação

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

    Um DataGridView controle e uma faixa de ferramentas (BindingNavigator) para navegar nos registros aparecem no formulário. Um OrdersTableAdapter e BindingSource aparecem na bandeja de componentes.

Adicionar código para atualizar o banco de dados

Você pode atualizar o banco de dados chamando os Update métodos de Customers e Orders TableAdapters. Por padrão, um manipulador de eventos para o botão Salvar do é adicionado ao código do formulário para enviar atualizações ao banco deBindingNavigator dados. Este procedimento modifica o código para enviar atualizações na ordem correta. Isso elimina a possibilidade de levantar erros de integridade referencial. O código também implementa o tratamento de erros encapsulando a chamada de atualização em um bloco try-catch. Você pode modificar 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 em 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 quaisquer alterações sejam confirmadas. 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 no BindingNavigator. Isso abre o Editor de Códigos para o manipulador de bindingNavigatorSaveItem_Click eventos.

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

    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 a aplicação

  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. Verifique os valores no banco de dados para verificar se as alterações foram salvas.