Porady: aktualizowanie danych za pomocą TableAdapter
Po danych zestawu danych został zmodyfikowany i zatwierdzony, prawdopodobnie chcesz wysyłać zaktualizowane dane z bazą.Aby wysłać zmodyfikowane dane do bazy danych, należy wywołać Update metoda TableAdapter.Karta Update metoda będzie aktualizować tabelę danych i wykonywanie poprawne polecenie (INSERT, UPDATE lub DELETE), oparty na RowState każdego wiersza danych w tabeli.Podczas zapisywania danych w tabelach pokrewnych, Visual Studio zawiera składnik TableAdapterManager, który pomaga w wykonywaniu zapisuje w odpowiedniej kolejności na podstawie ograniczeń klucza obcego, zdefiniowane w bazie danych.Aby uzyskać więcej informacji, zobacz Hierarchiczna aktualizacja — Przegląd.
[!UWAGA]
Ponieważ próby aktualizacji źródła danych z zawartością zestawu danych może spowodować błędy, należy umieścić kod, który wywołuje karta Update metody wewnątrz try/catch bloku.
Dokładną procedurę aktualizacji źródła danych mogą się różnić w zależności od potrzeb biznesowych, ale aplikacja powinna obejmować następujące kroki:
Wywołanie karta Update metodę w try/catch bloku.
Jeśli wyjątek, zlokalizuj wiersz danych, który spowodował błąd.Aby uzyskać więcej informacji, zobacz Porady: lokalizowanie wierszy zawierających błędy.
Uzgadnianie problem w danych wiersza (programowo, jeśli jest to możliwe, lub poprzez przedstawienie nieprawidłowy wiersz do użytkownika w celu modyfikacji), a następnie reattempt aktualizacji (HasErrors, GetErrors).
Zapisywanie danych do bazy danych
Wywołanie Update metody TableAdapter, przekazując nazwę tabeli danych zawiera wartości, które mają być zapisane w bazie danych.
Aby zaktualizować bazy danych z zestawu danych przy użyciu TableAdapter
Należy ująć karta Update metodę w try/catch bloku.Poniższy przykład pokazuje, jak próba aktualizacji z poziomu try/catch blok z zawartością Customers tabeli w NorthwindDataSet.
Try Me.Validate() Me.CustomersBindingSource.EndEdit() Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers) MsgBox("Update successful") Catch ex As Exception MsgBox("Update failed") End Try
try { this.Validate(); this.customersBindingSource.EndEdit(); this.customersTableAdapter.Update(this.northwindDataSet.Customers); MessageBox.Show("Update successful"); } catch (System.Exception ex) { MessageBox.Show("Update failed"); }
Aktualizowanie powiązanych tabel w zestawie danych z TableAdapter
Podczas aktualizowania tabel pokrewnych w elemencie dataset należy zaktualizować w poprawnej kolejności, aby zmniejszyć szansę naruszenie ograniczenia integralności referencyjnej.Kolejność wykonywania polecenia będzie również śledzić wskaźniki dla DataRowCollection w zestawie danych.Aby zapobiec podniesionych błędów integralności danych, najlepszym rozwiązaniem jest aktualizacja bazy danych w następującej kolejności:
Tabeli podrzędnej: usuwanie rekordów.
Tabela nadrzędna: wstawiania, aktualizacji i usuwania rekordów.
Tabeli podrzędnej: wstawianie i aktualizacja rekordów.
[!UWAGA]
Jeśli aktualizowane są dwa lub więcej powiązanych tabel, należy dołączyć wszystkie logikę aktualizacji w obrębie transakcji.Transakcja jest procesem, który zapewnia wszystkie pokrewne zmiany w bazie danych są pomyślne przed wykonaniem jakichkolwiek zmian.Aby uzyskać więcej informacji, zobacz Transactions and Concurrency.
Aby zaktualizować powiązanych tabel za pomocą TableAdapter
Należy utworzyć trzy tabele tymczasowe danych do przechowywania różnych rekordów.
Wywołanie Update metody każdy podzbiór wierszy z try/catch bloku.Jeśli wystąpią błędy aktualizacji, należy gałęzie i je rozwiązać.
Zatwierdź zmiany w bazie danych.
Pozbądź się tabele tymczasowe dane, aby zwolnić zasoby.
Poniższy przykład pokazuje sposób aktualizacji źródła danych z zestawu danych, który zawiera tabele powiązane relacją.
Private Sub UpdateDB() Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable) Dim newChildRecords As NorthwindDataSet.OrdersDataTable = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable) Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable = CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable) Try If deletedChildRecords IsNot Nothing Then OrdersTableAdapter.Update(deletedChildRecords) End If CustomersTableAdapter.Update(NorthwindDataSet.Customers) If newChildRecords IsNot Nothing Then OrdersTableAdapter.Update(newChildRecords) End If If modifiedChildRecords IsNot Nothing Then OrdersTableAdapter.Update(modifiedChildRecords) End If NorthwindDataSet.AcceptChanges() Catch ex As Exception MessageBox.Show("An error occurred during the update process") ' Add code to handle error here. Finally If deletedChildRecords IsNot Nothing Then deletedChildRecords.Dispose() End If If newChildRecords IsNot Nothing Then newChildRecords.Dispose() End If If modifiedChildRecords IsNot Nothing Then modifiedChildRecords.Dispose() End If End Try End Sub
void UpdateDB() { NorthwindDataSet.OrdersDataTable deletedChildRecords = (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Deleted); NorthwindDataSet.OrdersDataTable newChildRecords = (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Added); NorthwindDataSet.OrdersDataTable modifiedChildRecords = (NorthwindDataSet.OrdersDataTable)northwindDataSet.Orders.GetChanges(DataRowState.Modified); try { if (deletedChildRecords != null) { ordersTableAdapter.Update(deletedChildRecords); } customersTableAdapter.Update(northwindDataSet.Customers); if (newChildRecords != null) { ordersTableAdapter.Update(newChildRecords); } if (modifiedChildRecords != null) { ordersTableAdapter.Update(modifiedChildRecords); } northwindDataSet.AcceptChanges(); } catch (Exception ex) { MessageBox.Show("An error occurred during the update process"); // Add code to handle error here. } finally { if (deletedChildRecords != null) { deletedChildRecords.Dispose(); } if (newChildRecords != null) { newChildRecords.Dispose(); } if (modifiedChildRecords != null) { modifiedChildRecords.Dispose(); } } }
Zobacz też
Koncepcje
Powiązywanie formantów formularzy systemu Windows z danymi w Visual Studio
Przygotowywanie aplikacji na otrzymywanie danych
Pobieranie danych do aplikacji
Powiązywanie kontrolek z danymi w Visual Studio
Sprawdzanie poprawności danych