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
W programie Visual Studio z pliku menu, Utwórz nową projektu.
Nazwa projektu SavingDataInATransactionWalkthrough.
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
W menu Dane kliknij przycisk Pokaż źródła danych.
W źródła danych wybierz Dodaj nowe źródło danych można uruchomić Kreatora konfiguracji źródła danych.
Wybierz Baza danych na stronie Wybierz typ źródła danych, a następnie kliknij Dalej.
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.
Jeśli baza danych wymaga hasła, wybierz opcję dołączenia danych poufnych, a następnie kliknij przycisk Dalej.
Na stronie Zapisz ciąg połączeń do pliku konfiguracyjnego aplikacji kliknij Dalej.
Rozwiń węzeł Tabele na stronie Wybierz obiekty bazy danych.
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
Rozwiń węzeł klienci w węźle źródła danych okna.
Przeciągnij głównym klienci węzła z źródła danych okna na Form1.
Element DataGridView pasek narzędzi i kontroli (BindingNavigator) do nawigowania między rekordami są widoczne w formularzu.Element NorthwindDataSet, CustomersTableAdapter, BindingSource, i BindingNavigator są widoczne na pasku składnika.
Przeciągnij pokrewny zamówienia węzła (poniżej węzła powiązanej tabeli podrzędnej faksu kolumny, nie głównym zamówienia węzła) na poniższego formularza CustomersDataGridView.
Element DataGridView znajduje się na formularzu.OrdersTableAdapter i BindingSource są widoczne na pasku składnika.
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
Z projektu menu, wybierz polecenie Dodaj odwołanie.
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
Kliknij dwukrotnie zapisać znajdującego się na CustomersBindingNavigator (przycisk z ikoną dyskietek).
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
Sprawdzanie poprawności danych