Udostępnij za pośrednictwem


Przewodnik: zapisywanie danych w transakcji w aplikacjach .NET Framework

Uwaga

Zestawy danych i powiązane klasy to starsze technologie .NET Framework z początku 2000 roku, które umożliwiają aplikacjom pracę z danymi w pamięci, gdy aplikacje są odłączone od bazy danych. Technologie te są szczególnie przydatne w przypadku aplikacji, które umożliwiają użytkownikom modyfikowanie danych i utrwalanie zmian z powrotem w bazie danych. Mimo że zestawy danych okazały się bardzo udaną technologią, zalecamy, aby nowe aplikacje platformy .NET używały platformy Entity Framework Core. Program Entity Framework zapewnia bardziej naturalny sposób pracy z danymi tabelarycznymi jako modelami obiektów i ma prostszy interfejs programowania.

W tym przewodniku pokazano, jak zapisywać dane w transakcji przy użyciu System.Transactions przestrzeni nazw. W tym przewodniku utworzysz aplikację Windows Forms. Użyjesz Kreatora konfiguracji źródła danych, aby utworzyć zestaw danych dla dwóch tabel w przykładowej bazie danych Northwind. Dodasz kontrolki powiązane z danymi do formularza systemu Windows i zmodyfikujesz kod przycisku zapisywania BindingNavigator, aby zaktualizować bazę danych wewnątrz elementu TransactionScope.

Wymagania wstępne

Do ukończenia tego samouczka potrzebne są obciążenia tworzenia aplikacji klasycznych platformy .NET oraz przechowywania i przetwarzania danych zainstalowanych w programie Visual Studio. Aby je zainstalować, otwórz Instalator programu Visual Studio i wybierz pozycję Modyfikuj (lub Więcej>modyfikacji) obok wersji programu Visual Studio, którą chcesz zmodyfikować. Zobacz Modyfikowanie programu Visual Studio.

W tym przewodniku użyto bazy danych SQL Server Express LocalDB i przykładowej bazy danych Northwind.

  1. Jeśli nie masz bazy danych SQL Server Express LocalDB, zainstaluj ją ze strony pobierania programu SQL Server Express lub za pośrednictwem Instalator programu Visual Studio. W Instalator programu Visual Studio program SQL Server Express LocalDB można zainstalować jako część obciążenia tworzenia aplikacji klasycznych platformy .NET lub jako pojedynczy składnik.

  2. Zainstaluj przykładową bazę danych Northwind, wykonując następujące kroki:

    1. W programie Visual Studio otwórz okno Eksplorator obiektów programu SQL Server. (program SQL Server Eksplorator obiektów jest instalowany w ramach obciążenia Magazyn danych i przetwarzanie w Instalator programu Visual Studio). Rozwiń węzeł PROGRAMU SQL Server. Kliknij prawym przyciskiem myszy wystąpienie bazy danych LocalDB i wybierz pozycję Nowe zapytanie.

      Zostanie otwarte okno edytora zapytań.

    2. Skopiuj skrypt Northwind Transact-SQL do schowka. Ten skrypt języka T-SQL tworzy bazę danych Northwind od podstaw i wypełnia ją danymi.

    3. Wklej skrypt języka T-SQL do edytora zapytań, a następnie wybierz przycisk Wykonaj .

      Po krótkim czasie zapytanie zakończy działanie i zostanie utworzona baza danych Northwind.

Tworzenie aplikacji Windows Forms

Pierwszym krokiem jest utworzenie aplikacji Windows Forms App (.NET Framework).

  1. W programie Visual Studio w menu Plik wybierz pozycję Nowy>projekt.

  2. Rozwiń węzeł Visual C# lub Visual Basic w okienku po lewej stronie, a następnie wybierz pozycję Pulpit systemu Windows.

  3. W środkowym okienku wybierz typ projektu Aplikacja Windows Forms.

  4. Nadaj projektowi nazwę SavingDataInATransactionWalkthrough, a następnie wybierz przycisk OK.

    Projekt SavingDataInATransactionWalkthrough jest tworzony i dodawany do Eksplorator rozwiązań.

Tworzenie źródła danych bazy danych

W tym kroku użyto Kreatora konfiguracji źródła danych do utworzenia źródła danych na Customers podstawie tabel i Orders w przykładowej bazie danych Northwind.

  1. Aby otworzyć okno Źródła danych, w menu Dane wybierz pozycję Pokaż źródła danych.

  2. W oknie Źródła danych wybierz pozycję Dodaj nowe źródło danych, aby uruchomić Kreatora konfiguracji źródła danych.

  3. Na ekranie Wybierz typ źródła danych wybierz pozycję Baza danych, a następnie wybierz pozycję Dalej.

  4. Na ekranie Wybieranie połączenia danych wykonaj jedną z następujących czynności:

    • Jeśli na liście rozwijanej jest dostępne połączenie danych z przykładową bazą danych Northwind, wybierz je.

      — lub —

    • Wybierz pozycję Nowe połączenie , aby uruchomić okno dialogowe Dodawanie/Modyfikowanie połączenia i utwórz połączenie z bazą danych Northwind.

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

  6. Na ekranie Zapisz parametry połączenia w pliku konfiguracji aplikacji wybierz pozycję Dalej.

  7. Na ekranie Wybieranie obiektów bazy danych rozwiń węzeł Tabele .

  8. Wybierz tabele Customers i Orders , a następnie wybierz pozycję Zakończ.

    Zestaw NorthwindDataSet jest dodawany do projektu, a Customers tabele i Orders są wyświetlane w oknie Źródła danych.

Dodawanie kontrolek do formularza

Kontrolki powiązane z danymi można utworzyć, przeciągając elementy z okna Źródła danych na formularz.

  1. W oknie Źródła danych rozwiń węzeł Klienci.

  2. Przeciągnij główny węzeł Klienci z okna Źródła danych do formularza Form1.

    Kontrolka DataGridView i pasek narzędzi (BindingNavigator) do nawigowania po rekordach są wyświetlane w formularzu. Element NorthwindDataSet, CustomersTableAdapter, BindingSourcei BindingNavigator pojawi się na pasku składników.

  3. Przeciągnij powiązany węzeł Orders (nie główny węzeł Orders, ale powiązany węzeł tabeli podrzędnej poniżej kolumny Faks) na formularz poniżej elementu CustomersDataGridView.

    Zostanie DataGridView wyświetlony formularz. Element OrdersTableAdapter i BindingSource pojawi się w zasobniku składników.

Dodawanie odwołania do zestawu System.Transactions

Transakcje używają System.Transactions przestrzeni nazw. Odwołanie do projektu do zestawu system.transactions nie jest domyślnie dodawane, dlatego należy dodać go ręcznie.

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

  1. W menu Project (Projekt) wybierz pozycję Add Reference (Dodaj odwołanie).

  2. Wybierz pozycję System.Transactions (na .NET karcie), a następnie wybierz przycisk OK.

    Odwołanie do pliku System.Transactions jest dodawane do projektu.

Zmodyfikuj kod w przycisku SaveItem narzędzia BindingNavigator

Dla pierwszej tabeli porzuconej w formularzu kod jest domyślnie dodawany do click zdarzenia przycisku zapisywania w pliku BindingNavigator. Aby zaktualizować dodatkowe tabele, należy ręcznie dodać kod. W tym przewodniku refaktoryzujemy istniejący kod zapisywania poza procedurą obsługi zdarzeń kliknięcia przycisku zapisywania. Utworzymy również kilka innych metod, aby zapewnić określoną funkcjonalność aktualizacji na podstawie tego, czy wiersz musi zostać dodany, czy usunięty.

Aby zmodyfikować wygenerowany automatycznie kod zapisywania

  1. Wybierz przycisk Zapisz na karcie CustomersBindingNavigator (przycisk z ikoną dyskietki).

  2. Zastąp metodę CustomersBindingNavigatorSaveItem_Click poniższym kodem:

    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ść uzgadniania zmian powiązanych danych jest następująca:

  • Usuń rekordy podrzędne. (W tym przypadku usuń rekordy z Orders tabeli).

  • Usuń rekordy nadrzędne. (W tym przypadku usuń rekordy z Customers tabeli).

  • Wstaw rekordy nadrzędne. (W tym przypadku wstaw rekordy w Customers tabeli).

  • Wstaw rekordy podrzędne. (W tym przypadku wstaw rekordy w Orders tabeli).

Aby usunąć istniejące zamówienia

  • Dodaj następującą DeleteOrders metodę do formularza 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");
            }
        }
    }
    

Aby usunąć istniejących klientów

  • Dodaj następującą DeleteCustomers metodę do formularza 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");
            }
        }
    }
    

Aby dodać nowych klientów

  • Dodaj następującą AddNewCustomers metodę do formularza 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");
            }
        }
    }
    

Aby dodać nowe zamówienia

  • Dodaj następującą AddNewOrders metodę do formularza 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");
            }
        }
    }
    

Uruchamianie aplikacji

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