Partilhar via


Instruções passo a passo: salvando dados em uma transação

Este passo a passo demonstra como salvar dados em uma transação usando o namespace System.Transactions. Este exemplo usa as tabelas Customers e Orders do banco de dados de exemplo Northwind.

Pré-requisitos

Este passo a passo requer acesso ao banco de dados de exemplo Northwind. Para obter informações sobre como configurar o banco de dados de exemplo Northwind, consulte Como instalar bancos de dados de exemplo.

Criando um aplicativo do Windows

A primeira etapa é criar um Aplicativo do Windows.

Para criar o novo projeto do Windows

  1. No Visual Studio, no menu Arquivo, crie um novo Projeto.

  2. Nomeie o projeto como SavingDataInATransactionWalkthrough.

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

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

Criando uma fonte de dados para banco de dados

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

Para criar a fonte de dados

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

  2. Na janela Fontes de Dados, selecione 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 iniciar o Adicionar/Modificar conexão caixa de diálogo caixa e crie uma conexão ao banco de dados Northwind.

  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 Concluir.

    O NorthwindDataSet é adicionado ao projeto e as tabelas Customers e Orders aparecem na janela Fontes de Dados.

Adicionando controles ao formulário

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 Windows Form

Adicionando uma referência ao assembly System.Transactions

As transações usam o namespace System.Transactions. Uma referência do 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 Projeto, escolha Adicionar Referência.

  2. Selecione System.Transactions (na guia .NET) e clique em OK.

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

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

Por padrão, para a primeira tabela que entra em seu formulário, o código é adicionado ao evento click do botão salvar no BindingNavigator. É necessário adicionar manualmente o código para atualizar quaisquer tabelas adicionais. Neste passo a passo, vamos refatorar o código salvar existente no manipulador de eventos de clique do botão salvar e criar mais alguns métodos para fornecer a funcionalidade de atualização específica com base em se a linha precisa ser adicionada ou excluída.

Para modificar o código salvar gerado automaticamente

  1. Clique duas vezes no botão Salvar no CustomersBindingNavigator (o botão com o ícone de disquete).

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

    Private Sub CustomersBindingNavigatorSaveItem_Click() Handles CustomersBindingNavigatorSaveItem.Click
        UpdateData()
    End Sub 
    
    Private Sub UpdateData()
        Me.Validate()
        Me.CustomersBindingSource.EndEdit()
        Me.OrdersBindingSource.EndEdit()
    
        Using updateTransaction As New Transactions.TransactionScope
    
            DeleteOrders()
            DeleteCustomers()
            AddNewCustomers()
            AddNewOrders()
    
            updateTransaction.Complete()
            NorthwindDataSet.AcceptChanges()
        End Using 
    End Sub
    
    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 reconciliar as alterações aos dados relacionados é a seguinte:

  • Excluir registros filhos (neste caso, exclua registros da tabela Orders)

  • Excluir registros pais (neste caso, exclua registros da tabela Customers)

  • Inserir registros pais (neste caso, insira registros na tabela Customers)

  • Inserir registros filhos (neste caso, insira registros na tabela Orders)

Para excluir pedidos existentes

  • Adicione o seguinte método DeleteOrders a Form1:

    Private Sub DeleteOrders()
    
        Dim deletedOrders As NorthwindDataSet.OrdersDataTable
        deletedOrders = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted),
            NorthwindDataSet.OrdersDataTable)
    
        If Not IsNothing(deletedOrders) Then 
            Try
                OrdersTableAdapter.Update(deletedOrders)
    
            Catch ex As Exception
                MessageBox.Show("DeleteOrders Failed")
            End Try 
        End If 
    End Sub
    
    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 método DeleteCustomers a Form1:

    Private Sub DeleteCustomers()
    
        Dim deletedCustomers As NorthwindDataSet.CustomersDataTable
        deletedCustomers = CType(NorthwindDataSet.Customers.GetChanges(Data.DataRowState.Deleted),
            NorthwindDataSet.CustomersDataTable)
    
        If Not IsNothing(deletedCustomers) Then 
            Try
                CustomersTableAdapter.Update(deletedCustomers)
    
            Catch ex As Exception
                MessageBox.Show("DeleteCustomers Failed" & vbCrLf & ex.Message)
            End Try 
        End If 
    End Sub
    
    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 método AddNewCustomers a Form1:

    Private Sub AddNewCustomers()
    
        Dim newCustomers As NorthwindDataSet.CustomersDataTable
        newCustomers = CType(NorthwindDataSet.Customers.GetChanges(Data.DataRowState.Added),
            NorthwindDataSet.CustomersDataTable)
    
        If Not IsNothing(newCustomers) Then 
            Try
                CustomersTableAdapter.Update(newCustomers)
    
            Catch ex As Exception
                MessageBox.Show("AddNewCustomers Failed" & vbCrLf & ex.Message)
            End Try 
        End If 
    End Sub
    
    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 novos pedidos

  • Adicione o seguinte método AddNewOrders a Form1:

    Private Sub AddNewOrders()
    
        Dim newOrders As NorthwindDataSet.OrdersDataTable
        newOrders = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added),
            NorthwindDataSet.OrdersDataTable)
    
        If Not IsNothing(newOrders) Then 
            Try
                OrdersTableAdapter.Update(newOrders)
    
            Catch ex As Exception
                MessageBox.Show("AddNewOrders Failed" & vbCrLf & ex.Message)
            End Try 
        End If 
    End Sub
    
    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");
            }
        }
    }
    

Executando o aplicativo

Para executar o aplicativo

  • Pressione F5 para executar o aplicativo.

Consulte também

Tarefas

Como salvar dados usando uma transação

Conceitos

Transações distribuídas Oracle

System.Transactions integração com o SQL Server

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

Transações e simultaneidade

Conectando a dados no Visual Studio