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
No Visual Studio, do arquivo menu, crie um novo projeto.
Nomeie o projeto SavingDataInATransactionWalkthrough.
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
Sobre o dados menu, clique em Show Data Sources.
No fontes de dados janela, selecione Add New Data Source para iniciar o Data Source Configuration Wizard.
Selecione banco de dados sobre o Escolher um tipo de fonte de dados página 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 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.
Se seu banco de dados exigir uma senha, selecione a opção para incluir dados confidenciais e, em seguida, clique em próximo.
Clique em próximo sobre o Salvar cadeia de conexão no arquivo de configuração do aplicativo página.
Expanda o tabelas nó o Choose your Database Objects página.
Selecione o
Customers
eOrders
tabelas e clique Concluir.O NorthwindDataSet é adicionado ao seu projeto e a
Customers
eOrders
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
Expanda o clientes nó o fontes de dados janela.
Arraste principal clientes nó a partir de fontes de dados window para Form1.
Um DataGridView controle e uma faixa de ferramenta (BindingNavigator) para navegação em registros aparecem no formulário. Um NorthwindDataSet, CustomersTableAdapter, BindingSource, e BindingNavigator aparecem na bandeja de componentes.
Arraste o relacionado pedidos nó (o nó de tabela filha relacionada abaixo o Fax coluna, não principal pedidos nó) para o formulário abaixo o 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 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
Do projeto menu, escolha Adicionar referência.
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
Clique duas vezes o Salvar botão o CustomersBindingNavigator (o botão com o ícone de disquete).
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.