Udostępnij za pośrednictwem


Wskazówki: zapisywanie danych w transakcji

Niniejszy przewodnik pokazuje, jak można zapisać danych w transakcji przy użyciu System.Transactions przestrzeni nazw.W tym przykładzie zastosowano Customers i Orders tabele w bazie danych Northwind.

Wymagania wstępne

Niniejszy przewodnik wymaga dostępu do bazie danych Northwind.Aby uzyskać informacje o konfigurowaniu bazie danych Northwind, zobacz Porady: instalacja przykładowych baz danych.

Tworzenie aplikacji systemu Windows

Pierwszym krokiem jest utworzenie aplikacji systemu Windows.

Aby utworzyć nowy projekt systemu Windows

  1. W programie Visual Studio z pliku menu, Utwórz nową projektu.

  2. Nazwa projektu SavingDataInATransactionWalkthrough.

  3. Wybierz aplikacji systemu Windows i kliknij przycisk OK.Aby uzyskać więcej informacji, zobacz Wdrażanie aplikacji klienta za pomocą programu .NET Framework.

    SavingDataInATransactionWalkthrough projektu zostało utworzone i dodane do Eksploratora rozwiązań.

Tworzenie bazy danych źródła danych

Ten krok używa Kreator konfiguracji źródła danych Aby utworzyć źródło danych na podstawie Customers i Orders tabele w bazie danych Northwind.

Aby utworzyć źródło danych

  1. W menu Dane kliknij przycisk Pokaż źródła danych.

  2. W źródła danych wybierz Dodaj nowe źródło danych można uruchomić Kreatora konfiguracji źródła danych.

  3. Wybierz Baza danych na stronie Wybierz typ źródła danych, a następnie kliknij Dalej.

  4. Na Wybierz połączenie danych do strony, jedną z następujących czynności:

    • Jeśli połączenie danych z bazie danych Northwind jest dostępna na liście rozwijanej, zaznacz go.

      —lub—

    • Wybierz nowe połączenie można uruchomić Dodaj/Modyfikuj połączenia okna dialogowego pole i Utwórz połączenie z bazą danych Northwind.

  5. Jeśli baza danych wymaga hasła, wybierz opcję dołączenia danych poufnych, a następnie kliknij przycisk Dalej.

  6. Na stronie Zapisz ciąg połączeń do pliku konfiguracyjnego aplikacji kliknij Dalej.

  7. Rozwiń węzeł Tabele na stronie Wybierz obiekty bazy danych.

  8. Wybierz Customers i Orders tabel, a następnie kliknij przycisk Zakończ.

    NorthwindDataSet jest dodawany do projektu i Customers i Orders tabele zostaną wyświetlone w źródła danych okna.

Dodawanie formantów do formularza

Można utworzyć, przeciągając elementy z formantów powiązanych z danymi źródła danych okno do formularza.

Aby utworzyć dane powiązane formantów systemu Windows

Dodawanie odwołanie do zestawu System.Transactions

Użyj transakcji System.Transactions przestrzeni nazw.Odwołanie do zestawu system.transactions projektu nie jest dodawany domyślnie, musisz ręcznie dodać go.

Aby dodać odwołanie do pliku System.Transactions DLL

  1. Z projektu menu, wybierz polecenie Dodaj odwołanie.

  2. Wybierz System.Transactions (na .NET kartę) i kliknij przycisk OK.

    Odwołanie do System.Transactions jest dodawany do projektu.

Modyfikowanie kodu w parametrze BindingNavigator SaveItem przycisku

Domyślnie pierwszej tabeli na formularzu, kod zostanie dodany do click zdarzenia zapisywanie znajdującego się na BindingNavigator.Musisz ręcznie dodać kod, aby zaktualizować żadnych dodatkowych tabel.Dla tej procedury, firma Microsoft refactor istniejące zapisać kodu poza zapisywanie na przycisku kliknij program obsługi zdarzeń i Utwórz kilka więcej metody służące do zapewnienia funkcji określonej aktualizacji w oparciu o czy wiersza musi być dodany lub usunięty.

Aby zmodyfikować generowane automatycznie zapisać kodu

  1. Kliknij dwukrotnie zapisać znajdującego się na CustomersBindingNavigator (przycisk z ikoną dyskietek).

  2. Zastąp CustomersBindingNavigatorSaveItem_Click metody z następującego kodu:

    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();
        }
    }
    

Kolejność uzgadnianie zmian do danych pokrewnych jest w następujący sposób:

  • Usuń rekordy podrzędne (w tym przypadku usunąć rekordy Orders tabeli)

  • Usuń rekordy nadrzędnego (w tym przypadku usunąć rekordy Customers tabeli)

  • Wstaw rekordów nadrzędnych (w tym przypadku wstawiania rekordów w Customers tabeli)

  • Wstaw rekordy podrzędne (w tym przypadku wstawiania rekordów w Orders tabeli)

Aby usunąć istniejące zlecenia

  • Dodaj następujący DeleteOrders metodę w celu 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");
            }
        }
    }
    

Aby usunąć istniejących klientów

  • Dodaj następujący DeleteCustomers metodę w celu 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");
            }
        }
    }
    

Aby dodać nowych klientów

  • Dodaj następujący AddNewCustomers metodę w celu 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");
            }
        }
    }
    

Aby dodać nowe zamówienia

  • Dodaj następujący AddNewOrders metodę w celu 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");
            }
        }
    }
    

Uruchamianie aplikacji

Aby uruchomić aplikację

  • Naciśnij klawisz F5, aby uruchomić aplikację.

Zobacz też

Zadania

Porady: zapisywanie danych przy użyciu transakcji

Koncepcje

Oracle Distributed Transactions

System.Transactions Integration with SQL Server

Przygotowywanie aplikacji na otrzymywanie danych

Pobieranie danych do aplikacji

Powiązywanie kontrolek z danymi w Visual Studio

Edytowanie danych w aplikacji

Sprawdzanie poprawności danych

Zapisywanie danych

Inne zasoby

Transactions and Concurrency

Łączenie z danymi w Visual Studio