Návod: Ukládání dat do transakce
Tento průvodce ukazuje, jak uložit data v transakci pomocí System.Transactions oboru názvů.V tomto příkladu Customers a Orders tabulek z ukázkové databáze Northwind.
Požadavky
V tomto návodu vyžaduje přístup k databázi Northwind ukázky.Informace o nastavení ukázkové databáze Northwind naleznete v tématu Postupy: Instalace ukázkových databází.
Vytvoření aplikace pro Windows
Prvním krokem je vytvoření aplikace pro systém Windows.
Vytvoření nového projektu Windows
V sadě Visual Studio z soubor nabídky, vytvořte novou projektu.
Pojmenujte tento projekt SavingDataInATransactionWalkthrough.
Vyberte aplikace pro systém Windows a klikněte na tlačítko OK.Další informace naleznete v tématu Vývoj klientských aplikací s použitím rozhraní .NET Framework.
SavingDataInATransactionWalkthrough je vytvořen a přidán do projektu Průzkumníka ř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 databázi Northwind ukázky.
Vytvoření zdroje dat
V nabídce Data klikněte na tlačítko Zobrazit zdroje dat.
V zdroje dat okna, vyberte možnost Přidat nový zdroj dat spustit Průvodce konfigurací zdroje dat.
Vyberte možnost Databáze na stránce Zvolit typ datového zdroje a potom klikněte na tlačítko Další.
Na Vybrat datové připojení proveďte stránky, jeden z následujících akcí:
Pokud je k dispozici v rozevíracím seznamu datové připojení k databázi Northwind ukázky, vyberte jej.
-nebo-
Vyberte nové připojení ke spuštění Přidat či upravit připojení dialogové okno pole a umožňuje vytvořit připojení k databázi Northwind.
Pokud vaše databáze vyžaduje heslo, vyberte možnost k zahrnutí důvěrných osobních údajů a pak klikněte na tlačítko Další.
Klepněte na tlačítko Next na stránce Uložit připojovací řetězec do konfiguračního souboru aplikace.
Rozbalte uzel Tabulky na stránce Zvolte vaše databázové objekty.
Vyberte Customers a Orders tabulky a potom klikněte na tlačítko Dokončit.
NorthwindDataSet je přidán do projektu a Customers a Orders tabulky se zobrazí v zdroje dat okna.
Přidávání ovládacích prvků do formuláře
Můžete vytvořit ovládací prvky vázání dat přetažením položek z zdroje dat okno do formuláře.
Chcete-li vytvořit data vázané ovládací prvky ve formuláři systému Windows
Rozbalit Zákazníci uzel v zdroje dat okna.
Přetáhněte hlavní Zákazníci uzlu z zdroje dat okna do Form1.
Objekt DataGridView ovládací prvek a pruh nástrojů (BindingNavigator) pro procházení záznamů se zobrazí ve formuláři.Objekt NorthwindDataSet, CustomersTableAdapter, BindingSource, a BindingNavigator se zobrazí na hlavním panelu součásti.
Přetáhněte související objednávky uzlu (níže související tabulky podřízený uzel Fax sloupec, nikoli hlavní objednávky uzlu) do formuláře níže CustomersDataGridView.
Objekt DataGridView se zobrazí ve formuláři.OrdersTableAdapter a BindingSource se zobrazí na hlavním panelu součásti.
Přidání odkaz na sestavení System.Transactions
Použít transakce System.Transactions oboru názvů.Odkaz na projekt sestavení system.transactions není přidán ve výchozím nastavení, takže je třeba jej ručně přidat.
Chcete-li přidat odkaz na soubor knihovny DLL System.Transactions
Z projektu nabídce zvolte Přidat odkaz.
Vyberte System.Transactions (na .NET kartu) a klepněte na tlačítko OK.
Odkaz na System.Transactions je přidán do projektu.
Úpravy kódu objektu BindingNavigator SaveItem tlačítka
Ve výchozím nastavení pro první tabulky umistene do formuláře, kód je přidán do click události uložení tlačítka BindingNavigator.Je třeba ručně přidat kód k aktualizaci libovolné další tabulky.V tomto návodu jsme Refaktorovat existující uložení kódu mimo uložení tlačítko obslužnou rutinu události a vytvořit několik další metody, které poskytují funkce konkrétní aktualizace závislosti na tom, zda řádku je nutné přidat nebo odstranit.
Chcete-li změnit automatické generování kódu pro uložení
Klikněte dvakrát Uložit na tlačítko CustomersBindingNavigator (tlačítko s ikonou disketa).
Nahradit CustomersBindingNavigatorSaveItem_Click metodu s 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í pro vyřešení změny do data v relaci je následující:
Odstranit podřízené záznamy (v takovém případě odstranit záznamy Orders tabulky)
Odstranit nadřazených záznamů (v takovém případě odstranit záznamy Customers tabulky)
Vložit nadřazených záznamů (v takovém případě vložit záznamy v Customers tabulky)
Vložit podřízené záznamy (v takovém případě vložit záznamy v Orders tabulky)
Chcete-li odstranit existující objednávky
Přidejte následující DeleteOrders metodu za účelem 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"); } } }
Chcete-li odstranit stávající zákazníky
Přidejte následující DeleteCustomers metodu za účelem 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"); } } }
Chcete-li přidat nové zákazníky
Přidejte následující AddNewCustomers metodu za účelem 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"); } } }
Chcete-li přidat nové objednávky
Přidejte následující AddNewOrders metodu za účelem 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 ke spuštění aplikace.
Viz také
Úkoly
Postupy: Ukládání dat pomocí transakce
Koncepty
Oracle Distributed Transactions
System.Transactions Integration with SQL Server
Příprava vaší aplikace k příjmu dat
Vázání ovládacích prvků k datům v sadě Visual Studio
Upravování dat ve vaší aplikaci