Partilhar via


Passo a passo: Salvar dados em uma transação 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.

Este passo a passo demonstra como salvar dados em uma transação usando o System.Transactions namespace. Neste passo a passo, você criará um aplicativo do Windows Forms. Você usará o Assistente de Configuração da Fonte de Dados para criar um conjunto de dados para duas tabelas no banco de dados de exemplo Northwind. Você adicionará controles associados a dados a um formulário do Windows e modificará o código do botão de salvamento do BindingNavigator para atualizar o banco de dados dentro de um TransactionScope.

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, o SQL Server Express LocalDB pode ser instalado como parte da carga de trabalho de desenvolvimento da área de trabalho .NET 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 um aplicativo do Windows Forms

A primeira etapa é criar um aplicativo Windows Forms (.NET Framework).

  1. No Visual Studio, no menu Ficheiro, selecione Novo>Projeto.

  2. Expanda Visual C# ou Visual Basic no painel esquerdo e, em seguida, selecione Windows Desktop.

  3. No painel central, selecione o tipo de projeto Windows Forms App .

  4. Nomeie o projeto SavingDataInATransactionWalkthrough e escolha OK.

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

Criar uma fonte de dados de banco de dados

Esta etapa usa o Assistente de Configuração da Fonte de Dados para criar uma fonte de dados com base nas Customers tabelas e Orders no banco de dados de exemplo Northwind.

  1. Para abrir a janela Fontes de Dados , no menu Dados , selecione Mostrar Fontes de Dados.

  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 iniciar a caixa de diálogo Adicionar/Modificar Conexão e criar uma conexão com o banco de dados Northwind.

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

  6. Na tela 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 Customers tabelas e Orders e, em seguida, selecione Concluir.

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

Adicionar controles ao formulário

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

  1. Na janela Fontes de Dados, expanda o nó Clientes.

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

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

  3. Arraste o nó Pedidos relacionado (não o nó principal Pedidos, mas sim o nó da tabela filho relacionado sob a coluna Fax) para o formulário, abaixo de CustomersDataGridView.

    A DataGridView aparece no formulário. Um OrdersTableAdapter e BindingSource aparecem na bandeja de componentes.

Adicionar uma referência ao assembly System.Transactions

As transações usam o System.Transactions namespace. Uma referência de projeto ao assembly system.transactions não é adicionada por padrão, portanto, você precisa adicioná-la manualmente.

Para adicionar uma referência ao arquivo DLL System.Transactions

  1. No menu Project, selecione Adicionar referência.

  2. Selecione System.Transactions (no separador .NET) e, em seguida, selecione OK.

    Uma referência a System.Transactions é adicionada ao projeto.

Modifique o código no botão SaveItem do BindingNavigator

Para a primeira tabela inserida no formulário, o código click é adicionado por padrão ao evento do botão Salvar no BindingNavigator. Você precisa adicionar código manualmente para atualizar quaisquer tabelas adicionais. Para este tutorial, refatoramos o código de salvamento existente do gestor de eventos de clique do botão salvar. Também criamos mais alguns métodos para fornecer funcionalidade de atualização específica com base na necessidade de adicionar ou excluir a linha.

Para modificar o código de salvamento gerado automaticamente

  1. Selecione o botão Salvar no CustomersBindingNavigator (o botão com o ícone do disquete).

  2. Substitua o método CustomersBindingNavigatorSaveItem_Click com o seguinte código:

    private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        UpdateData();
    }
    
    private void UpdateData()
    {
        this.Validate();
        this.customersBindingSource.EndEdit();
        this.ordersBindingSource.EndEdit();
    
        using (System.Transactions.TransactionScope updateTransaction = 
            new System.Transactions.TransactionScope())
        {
            DeleteOrders();
            DeleteCustomers();
            AddNewCustomers();
            AddNewOrders();
    
            updateTransaction.Complete();
            northwindDataSet.AcceptChanges();
        }
    }
    

A ordem para conciliar alterações em dados relacionados é a seguinte:

  • Excluir registros filhos. (Nesse caso, exclua os registros da Orders tabela.)

  • Exclua os registros pai. (Nesse caso, exclua os registros da Customers tabela.)

  • Insira registros pai. (Nesse caso, insira registros na Customers tabela.)

  • Insira registos filhos. (Nesse caso, insira registros na Orders tabela.)

Para excluir pedidos existentes

  • Adicione o seguinte DeleteOrders método ao Form1:

    private void DeleteOrders()
    {
        NorthwindDataSet.OrdersDataTable deletedOrders;
        deletedOrders = (NorthwindDataSet.OrdersDataTable)
            northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
        if (deletedOrders != null)
        {
            try
            {
                ordersTableAdapter.Update(deletedOrders);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("DeleteOrders Failed");
            }
        }
    }
    

Para excluir clientes existentes

  • Adicione o seguinte DeleteCustomers método ao Form1:

    private void DeleteCustomers()
    {
        NorthwindDataSet.CustomersDataTable deletedCustomers;
        deletedCustomers = (NorthwindDataSet.CustomersDataTable)
            northwindDataSet.Customers.GetChanges(DataRowState.Deleted);
    
        if (deletedCustomers != null)
        {
            try
            {
                customersTableAdapter.Update(deletedCustomers);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("DeleteCustomers Failed");
            }
        }
    }
    

Para adicionar novos clientes

  • Adicione o seguinte AddNewCustomers método ao Form1:

    private void AddNewCustomers()
    {
        NorthwindDataSet.CustomersDataTable newCustomers;
        newCustomers = (NorthwindDataSet.CustomersDataTable)
            northwindDataSet.Customers.GetChanges(DataRowState.Added);
    
        if (newCustomers != null)
        {
            try
            {
                customersTableAdapter.Update(newCustomers);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("AddNewCustomers Failed");
            }
        }
    }
    

Para adicionar novas encomendas

  • Adicione o seguinte AddNewOrders método ao Form1:

    private void AddNewOrders()
    {
        NorthwindDataSet.OrdersDataTable newOrders;
        newOrders = (NorthwindDataSet.OrdersDataTable)
            northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
        if (newOrders != null)
        {
            try
            {
                ordersTableAdapter.Update(newOrders);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("AddNewOrders Failed");
            }
        }
    }
    

Execute o aplicativo

Pressione F5 para executar o aplicativo.