Compartilhar via


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

 

Publicado: abril de 2016

Este passo a passo demonstra como salvar dados em uma transação usando o System.Transactions namespace. Este exemplo usa o Customers e Orders tabelas 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 Windows Application.

Para criar o novo projeto do Windows

  1. No Visual Studio, do arquivo menu, crie um novo projeto.

  2. Nomeie o projeto SavingDataInATransactionWalkthrough.

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

    O SavingDataInATransactionWalkthrough projeto é criado e adicionado ao Solution Explorer.

Criando uma fonte de dados do 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. Sobre o dados menu, clique em Show Data Sources.

  2. No fontes de dados janela, selecione Add New Data Source para iniciar o Data Source Configuration Wizard.

  3. Selecione banco de dados sobre o Escolher um tipo de fonte de dados página 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 para o 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 criar uma conexão com o banco de dados Northwind.

  5. Se seu banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais e, em seguida, clique em próximo.

  6. Clique em próximo sobre o Salvar cadeia de conexão no arquivo de configuração do aplicativo página.

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

  8. Selecione o Customers e Orders tabelas e clique Concluir.

    O NorthwindDataSet é adicionado ao seu projeto e a Customers e Orders as tabelas aparecem no fontes de dados janela.

Adicionando controles ao formulário

Você pode criar os controles associados a dados arrastando itens do fontes de dados window para seu formulário.

Para criar dados vinculados a controles no Windows Form

Adicionando uma referência ao Assembly System. Transactions

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

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

  1. Do projeto menu, escolha Adicionar referência.

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

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

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

Por padrão, para a primeira tabela arrastada para seu formulário, código é adicionado para o click botão evento do salvamento a BindingNavigator. Você precisa adicionar manualmente o código para atualizar quaisquer tabelas adicionais. Para este passo a passo, podemos refatorar o código salvar existente manipulador de eventos de clique do botão 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 auto-código salvar gerado

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

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

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

A ordem para reconciliar as alterações aos dados relacionados é da seguinte maneira:

  • Excluir registros filho (neste caso, exclua registros do Orders tabela)

  • Excluir registros pai (neste caso, exclua registros do Customers tabela)

  • Inserir registros pai (neste caso, inserir registros a Customers tabela)

  • Inserir registros filho (neste caso, inserir registros a Orders tabela)

Para excluir pedidos existentes

  • Adicione o seguinte DeleteOrders método 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");
                    }
                }
            }
    
        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
    

Para excluir clientes existentes

  • Adicione o seguinte DeleteCustomers método 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");
                    }
                }
            }
    
        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
    

Para adicionar novos clientes

  • Adicione o seguinte AddNewCustomers método 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");
                    }
                }
            }
    
        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
    

Para adicionar novos pedidos

  • Adicione o seguinte AddNewOrders método 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");
                    }
                }
            }
    
        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
    

Executando o aplicativo

Para executar o aplicativo

  • Pressione F5 para executar o aplicativo.

Consulte também

Salvar dados no banco de dados