Sdílet prostřednictvím


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

  1. V sadě Visual Studio z soubor nabídky, vytvořte novou projektu.

  2. Název projektu SavingDataInATransactionWalkthrough.

  3. 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

  1. Na Data nabídky, klikněte na tlačítko Zobrazit zdroje dat.

  2. V zdroje dat vyberte Přidat nový zdroj dat ke spuštění Průvodce konfigurací zdroje dat.

  3. Vyberte databáze na Zvolte typ zdroje dat a potom klikněte na tlačítko Další.

  4. 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.

  5. Pokud vaše databáze vyžaduje heslo, vyberte možnost zahrnout citlivá data, a potom klikněte na tlačítko Další.

  6. Klikněte na tlačítko Další na Uložit připojovací řetězec do konfiguračního souboru aplikace stránky.

  7. Rozbalte tabulky uzel na Zvolte vaše databázové objekty stránky.

  8. Vyberte Customers a Orders tabulky a pak 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á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

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

  1. Z projektu nabídce zvolte Přidat odkaz na.

  2. 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

  1. Dvakrát klikněte Uložit na tlačítko CustomersBindingNavigator (tlačítko s ikonou disketa).

  2. 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.

Viz také

Uložit data do databáze