Demonstra Passo a passo: Salvando dados em uma transação

Essa explicação passo a passo mostra como salvar dados em uma transação usando o namespace System.Transactions.Esse exemplo usa as tabelas Customers e Orders do banco de dados de amostra Northwind.

Pré-requisitos

Esta explicação 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 Windows

A primeira etapa é criar um Windows Application.

Para criar o novo projeto Windows

  1. No Visual Studio, a partir do menu File, crie um novo Project.

  2. Nomeie o projeto SavingDataInATransactionWalkthrough.

  3. Selecione Windows Application e clique em OK.Para obter mais informações, consulte Criando Aplicativos Baseados no Windows.

    O projeto SavingDataInATransactionWalkthrough é criado e adicionado no Solution Explorer.

Criar uma fonte de dados de banco de dados

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

Para criar o DataSet

  1. No menu Data, clique em Show Data Sources.

  2. Na janela Data Sources, selecione Add New Data Source para iniciar o Data Source Configuration Wizard.

  3. Selecione Database na página Choose a Data Source Type, e clique Next.

  4. Na página Choose your Data Connection siga um destes procedimentos:

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

      - ou -

    • Selecione New Connection para iniciar caixa de diálogo Add/Modify Connection e criar uma conexão com o banco de dados Northwind.Para obter mais informações, consulte Adicionar/Modificar Conexão Caixa de diálogo Box (Geral).

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

  6. Clique Next na página Save connection string to the Application Configuration file.

  7. Expanda o nó Tables na página Choose your Database Objects.

  8. Selecione as tabelas Customers e Orders, e clique em Finish.

    The NorthwindDataSet é adicionado ao seu projeto e o Customers e Orders tabelas aparecem na Fontes de dados janela.

Adicionar os controles ao formulário

Você pode criar os controles com dados vinculados, arrastando itens da janela Data Sources para seu formulário.

Para criar dados acoplados ao controles no Windows Form

Adicionar uma referência para o assembly System.Transactions

Transações usam o namespace System.Transactions.Uma referência de projeto ao conjunto de módulos (assembly) System.Transactions não é adicionada por padrão, portanto você precisa adicioná-la manualmente.

Para adicionar uma referência para o arquivo DLL System.Transactions

  1. No menu Project, escolha Add Reference.

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

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

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

Por padrão, para a primeira tabela levada para seu formulário, o código é adicionado ao evento click do botão de salvar no BindingNavigator.Você precisa adicionar manualmente o código para atualizar quaisquer tabelas adicionais.Para esta explicação passo a passo, nós reusaremos o código existente para o manipulador de evento do botão salvar e criaremos mais de alguns métodos para fornecer funcionalidade de atualização específica com base se a linha necessita ser adicionada ou excluída.

Para modificar a salvar o código gerado automaticamente

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

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

    Private Sub CustomersBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        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:

  • Exclua registros filho (neste caso, exclua registros da tabela Orders)

  • Exclua registros pai (neste caso, excluir registros da tabela Customers)

  • Insira registros pai (neste caso, insira registros da tabela Customers)

  • Insira registros filho (neste caso, insira registros da tabela Orders)

Para excluir pedidos existentes

  • Adicione o seguinte método DeleteOrders ao 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 ao 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 ao 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 ao 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 por meio de uma transação

Conceitos

Inscrevendo em transações distribuídas

Aproveitando Sistema.Transactions

Outros recursos

Performing Transactions

Conectando-se a Dados no Visual Studio

Preparando seu aplicativo para receber dados

Buscando dados em seu aplicativo

Exibindo dados em formulários em aplicativos do Windows

Editar dados no seu aplicativo

Validando Dados

Salvando dados