Názorný postup: Ukládání dat v transakci
Názorný transakce pomocí uložení dat System.Transactions oboru názvů.V tomto příkladu Customers a Orders tabulek z ukázkové databáze Northwind.
Požadavky
Tento postup vyžaduje přístup k ukázkové databázi Northwind.Informace o nastavení ukázkové databáze Northwind, Jak: Instalace ukázkové databáze.
Vytvoření aplikace pro Windows
Prvním krokem je vytvoření Aplikace systému Windows.
Vytvořit nový projekt systému Windows
V aplikaci Visual Studio z soubor nabídka, vytvoření nového projektu.
Název projektu SavingDataInATransactionWalkthrough.
Vyberte Aplikace systému Windows a na OK.Další informace naleznete v tématu Tvorba klientských aplikací.
SavingDataInATransactionWalkthrough projektu je vytvořena a přidána do Aplikaci Solution Explorer.
Vytváření zdroje dat databáze
Tento krok se používá Průvodce konfigurací zdroje dat vytvořit zdroj dat založený na Customers a Orders tabulek v ukázkové databázi Northwind.
Vytvořit zdroj dat
V nabídce Data klikněte na tlačítko Zobrazit zdroje dat.
V Zdroje dat vyberte Přidat nový zdroj dat spustit Průvodce konfigurací zdroje dat.
Vyberte Databázi na stránce Zvolit datový typ zdrojová databáze a potom klikněte na tlačítko Next.
Na Zvolte datové připojení stránky proveďte jeden z následujících:
Pokud datové připojení k ukázkové databázi Northwind je k dispozici v rozevíracím seznamu, vyberte ji.
-nebo-
Vyberte Nové připojení spustit Přidat nebo změnit připojení dialogovém okně pole a vytvořit připojení k databázi Northwind.Další informace naleznete v tématu Přidat či upravte dialogové okno připojení (Obecné).
Pokud databáze vyžaduje heslo, vyberte možnost obsahují citlivá data a potom klepněte na tlačítko Další.
Klepněte na tlačítko Další na Uložit řetězec připojení v souboru konfigurace aplikace stránku.
Rozbalte tabulek uzel zvolit databázové objekty stránky.
Vyberte Customers a Orders tabulky a pak klepněte na tlačítko Dokončit.
NorthwindDataSet je do projektu a Customers a Orders tabulky se zobrazí v Zdroje dat okna.
Přidání ovládacích prvků do formuláře
Ovládací prvky vázané dat můžete vytvořit přetažením položek z Zdroje dat okna, do formuláře.
Vytvořit data vázané ovládací prvky na formuláři systému Windows
Rozbalte Zákazníci v uzlu Zdroje dat okna.
Přetáhněte hlavní Zákazníci z uzlu Zdroje dat okna do Form1.
A DataGridView řízení a pruh nástrojů (BindingNavigator) pro procházení záznamů se zobrazí ve formuláři.A NorthwindDataSet, CustomersTableAdapter, BindingSource, a BindingNavigator se zobrazují na hlavním panelu komponenty.
Přetáhněte související objednávky uzel (pod související tabulce podřízený uzel Fax sloupec, není hlavní objednávky uzlu) do formuláře níže CustomersDataGridView.
A DataGridView se zobrazí ve formuláři.OrdersTableAdapter a BindingSource se zobrazují na hlavním panelu komponenty.
Přidávání odkazu na sestavení System.Transactions
Použití transakcí System.Transactions oboru názvů.Projektu odkaz na sestavení objektu system.transactions není přidán ve výchozím, je nutné přidat ručně.
Přidat odkaz na soubor knihovny DLL objektu System.Transactions
Z projektu nabídce zvolte Přidat odkaz na.
Vyberte objektu System.Transactions (na .NET kartu) a klepněte na tlačítko OK.
Odkaz na objektu System.Transactions je do projektu.
Úpravy kódu BindingNavigator provádí SaveItem tlačítka
Ve výchozím nastavení pro první tabulky vyřazené do formuláře, kód je přidán do click události uložit tlačítka BindingNavigator.Je třeba ručně přidat kód aktualizovat libovolné další tabulky.Tento návod jsme refactor, uložit kód z uložit existující tlačítka klepněte na obslužnou rutinu události a vytvořit další metody několik funkcí konkrétní aktualizace, zda je řádek přidány nebo odstraněny na základě.
Změna automaticky generovaný uložit kód
Poklepejte Uložit tlačítka CustomersBindingNavigator (tlačítko s ikonou diskety).
Nahraďte metodu CustomersBindingNavigatorSaveItem_Click následujícím kódem:
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(); } }
Pořadí slučování změn souvisejících dat je následující:
Odstranění podřízených záznamů (v tomto případě odstranit záznamy Orders tabulky)
Odstranění záznamů nadřazené (v tomto případě odstranit záznamy Customers tabulky)
Vložení záznamů nadřazené (v tomto případě vložit záznamy Customers tabulky)
Vložení podřízené záznamy (v tomto případě vložit záznamy Orders tabulky)
Odstranit existující objednávky
Přidejte následující DeleteOrders metody 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"); } } }
Odstranit existující zákazníky
Přidejte následující DeleteCustomers metody 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"); } } }
Přidání nové zákazníky
Přidejte následující AddNewCustomers metody 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"); } } }
Přidání nové objednávky
Přidejte následující AddNewOrders metody 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"); } } }
Spuštění aplikace
Spuštění aplikace
- Stisknutím klávesy F5 spustíte aplikaci.
Viz také
Úkoly
Jak: uložení dat pomocí transakce
Koncepty
Enlisting in Distributed Transactions
Leveraging System.Transactions
Příprava aplikace pro příjem dat.
Ovládací prvky vazby na Data v aplikaci Visual Studio