Compartilhar via


Demonstra Passo a passo: Salvar 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 amostra.

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. No Fontes de dados janela, 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 a caixa de diálogo de conexão (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.

    O 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 controles ligados a dados arrastando itens a partir de Fontes de dados janela 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() 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 usando uma transação.

Conceitos

Oracle Distributed Transactions

System.Transactions Integration with SQL Server (ADO.NET)

Controles de vinculação de dados de Visual Studio

Outros recursos

Transactions and Concurrency (ADO.NET)

Conectando-se a Dados no Visual Studio

Preparando seu aplicativo para receber dados

Buscando dados em seu aplicativo

Editar dados no seu aplicativo

Validando Dados

Salvando dados