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

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

  2. Pojmenujte tento projekt SavingDataInATransactionWalkthrough.

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

  1. V nabídce Data klikněte na tlačítko Zobrazit zdroje dat.

  2. V zdroje dat okna, vyberte možnost Přidat nový zdroj dat spustit Průvodce konfigurací zdroje dat.

  3. Vyberte možnost Databáze na stránce Zvolit typ datového zdroje a potom klikněte na tlačítko Další.

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

  5. 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ší.

  6. Klepněte na tlačítko Next na stránce Uložit připojovací řetězec do konfiguračního souboru aplikace.

  7. Rozbalte uzel Tabulky na stránce Zvolte vaše databázové objekty.

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

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

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

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

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

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

Načítání dat do vaší aplikace

Vázání ovládacích prvků k datům v sadě Visual Studio

Upravování dat ve vaší aplikaci

Ověřování dat

Ukládání dat

Další zdroje

Transactions and Concurrency

Připojení k datům v sadě Visual Studio