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
No Visual Studio, no menu Arquivo, crie um novo Projeto.
Nomeie o projeto como SavingDataInATransactionWalkthrough.
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
No menu Dados, clique em Mostrar Fontes de Dados.
Na janela Fontes de Dados, selecione Adicionar Nova Fonte de Dados para iniciar o Assistente de Configuração de Fonte de Dados.
Selecione Base de dados na página Escolher um Tipo de Fonte de Dados e, em seguida, clique em Próximo.
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.
Se o banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais e, em seguida, clique em Próximo.
Clique em Avançar na página Salvar cadeia de caracteres de conexão no arquivo de configuração do aplicativo.
Expanda o nó Tabelas na página Escolher Objetos do Banco de Dados.
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
Expanda o nó Clientes na janela Fontes de Dados.
Arraste o nó principal Clientes da janela Fontes de Dados para Form1.
Um controle DataGridView e uma faixa de ferramentas (BindingNavigator) para navegação em registros são exibidos no formulário. Um NorthwindDataSet, CustomersTableAdapter, BindingSource e BindingNavigator são exibidos na bandeja de componentes.
Arraste o nó relacionado Pedidos (o nó da tabela filha relacionada abaixo da coluna Fax, e não o nó Pedidos principal) para o formulário abaixo de CustomersDataGridView.
Um DataGridView aparece no formulário. Um OrdersTableAdapter e BindingSource aparecem na bandeja de componentes.
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
No menu Projeto, escolha Adicionar Referência.
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
Clique duas vezes no botão Salvar no CustomersBindingNavigator (o botão com o ícone de disquete).
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
Associando controles a dados no Visual Studio