Udostępnij za pośrednictwem


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:

  1. Wywołanie karta Update metodę w try/catch bloku.

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

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

  1. Tabeli podrzędnej: usuwanie rekordów.

  2. Tabela nadrzędna: wstawiania, aktualizacji i usuwania rekordów.

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

  1. Należy utworzyć trzy tabele tymczasowe danych do przechowywania różnych rekordów.

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

  3. Zatwierdź zmiany w bazie danych.

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

TableAdapter — Przegląd

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

Edytowanie danych w aplikacji

Sprawdzanie poprawności danych

Zapisywanie danych

Inne zasoby

Wskazówki dotyczące danych

Łączenie z danymi w Visual Studio