Návod: Ukládání dat do transakce
Publikováno: duben 2016
Tento návod ukazuje, jak k uložení dat v transakci pomocí System.Transactions oboru názvů. Tento příklad používá Customers
a Orders
tabulek z ukázkové databázi Northwind.
Požadavky
Tento návod vyžaduje přístup k ukázkové databázi Northwind. Informace o nastavení ukázkové databázi Northwind naleznete v tématu Postupy: Instalace ukázkových databází.
Vytvoření aplikace pro Windows
Prvním krokem je vytvoření aplikace Windows.
Vytvoření nového projektu Windows
V sadě Visual Studio z soubor nabídky, vytvořte novou projektu.
Název projektu SavingDataInATransactionWalkthrough.
Vyberte aplikace Windows a klikněte na tlačítko OK. Další informace naleznete v tématu Klientské aplikace.
SavingDataInATransactionWalkthrough je vytvořen a přidán do projektu Průzkumníku řešení.
Vytvoření zdroje dat databáze
Tento krok používá Průvodce konfigurací zdroje dat vytvořit zdroj dat na základě Customers
a Orders
tabulky v ukázkové databázi Northwind.
Vytvoření zdroje dat
Na Data nabídky, klikněte na tlačítko Zobrazit zdroje dat.
V zdroje dat vyberte Přidat nový zdroj dat ke spuštění Průvodce konfigurací zdroje dat.
Vyberte databáze na Zvolte typ zdroje dat a potom klikněte na tlačítko Další.
Na Vybrat datové připojení proveďte jednu z následujících akcí:
Pokud připojení dat k ukázkové databázi Northwind k dispozici v rozevíracím seznamu, vyberte ji.
- nebo -
Vyberte nové připojení ke spuštění Přidat nebo upravit připojení dialogové okno pole a vytvořit připojení k databázi Northwind.
Pokud vaše databáze vyžaduje heslo, vyberte možnost zahrnout citlivá data, a potom klikněte na tlačítko Další.
Klikněte na tlačítko Další na Uložit připojovací řetězec do konfiguračního souboru aplikace stránky.
Rozbalte tabulky uzel na Zvolte vaše databázové objekty stránky.
Vyberte
Customers
aOrders
tabulky a pak klikněte na tlačítko Dokončit.NorthwindDataSet je přidán do projektu a
Customers
aOrders
tabulky se zobrazí v zdroje dat okna.
Přidání ovládacích prvků do formuláře
Můžete vytvořit ovládací prvky vázané na data přetažením položek z zdroje dat do formuláře.
Chcete-li vytvořit data vázané ovládací prvky na formuláři Windows
Rozbalte Zákazníci uzel v zdroje dat okna.
Přetáhněte hlavní Zákazníci uzlu z zdroje dat okna do Form1.
A DataGridView ovládacího prvku a pruh nástrojů (BindingNavigator) pro procházení záznamů zobrazit ve formuláři. A NorthwindDataSet, CustomersTableAdapter, BindingSource, a BindingNavigator v panelu komponent se zobrazí.
Přetáhněte související objednávky uzlu (uzlu související podřízené tabulky níže Fax sloupec, není hlavním objednávky uzlu) do formuláře dole CustomersDataGridView.
A DataGridView se zobrazí ve formuláři.OrdersTableAdapter a BindingSource v panelu komponent se zobrazí.
Přidání odkazu na sestavení System.Transactions
Použití transakcí System.Transactions oboru názvů. Odkaz na sestavení system.transactions projekt není přidán ve výchozím nastavení, takže je třeba přidat ručně.
Chcete-li přidat odkaz na soubor System.Transactions DLL
Z projektu nabídce zvolte Přidat odkaz na.
Vyberte System.Transactions (na .NET karta) a klikněte na tlačítko OK.
Odkaz na System.Transactions je přidán do projektu.
Změny kódu BindingNavigator SaveItem tlačítka
Ve výchozím nastavení pro první tabulky vyřadit do formuláře, kód je přidán do click
události uložení tlačítko na BindingNavigator. Je třeba ručně přidat kód k aktualizaci libovolné další tabulky. V tomto návodu jsme Refaktorovat existující uložit kódu mimo uložení tlačítko obslužná rutina události a vytvořit několik další metody, které poskytují funkce konkrétní aktualizace závislosti na tom, zda řádek musí být přidány nebo odstraněny.
Chcete-li upravit, automaticky generované uložit kódu
Dvakrát klikněte Uložit na tlačítko CustomersBindingNavigator (tlačítko s ikonou disketa).
Nahradit
CustomersBindingNavigatorSaveItem_Click
Metoda s následujícím kódem: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
Pořadí pro sjednocování změn do souvisejících dat je následující:
Odstranit podřízené záznamy (v tomto případě odstranění záznamů z
Orders
tabulka)Odstranit nadřazené záznamy (v tomto případě odstranění záznamů z
Customers
tabulka)Vložit nadřazené záznamy (v tomto případě vkládání záznamů v
Customers
tabulka)Vložit podřízené záznamy (v tomto případě vkládání záznamů v
Orders
tabulka)
Chcete-li odstranit existující objednávky
Přidejte následující
DeleteOrders
metodu 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
Chcete-li odstranit stávající zákazníky
Přidejte následující
DeleteCustomers
metodu 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
Chcete-li přidat nové zákazníky
Přidejte následující
AddNewCustomers
metodu 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
Chcete-li přidat nové objednávky
Přidejte následující
AddNewOrders
metodu 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
Spuštění aplikace
Ke spuštění aplikace
- Stisknutím klávesy F5 ke spuštění aplikace.