Udostępnij za pośrednictwem


DataAdapter.Update(DataSet) Metoda

Definicja

Wywołuje odpowiednie instrukcje INSERT, UPDATE lub DELETE dla każdego wstawionego, zaktualizowanego lub usuniętego DataTable wiersza w określonym DataSet z nazwy "Tabela".

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
Public Overridable Function Update (dataSet As DataSet) As Integer
Public MustOverride Function Update (dataSet As DataSet) As Integer

Parametry

dataSet
DataSet

Służy DataSet do aktualizowania źródła danych.

Zwraca

Liczba wierszy została pomyślnie zaktualizowana z elementu DataSet.

Implementuje

Wyjątki

Tabela źródłowa jest nieprawidłowa.

Próba wykonania instrukcji INSERT, UPDATE lub DELETE spowodowała zero rekordów, których dotyczy problem.

Przykłady

W poniższym przykładzie użyto klasy pochodnej , OleDbDataAdapterdo Update źródła danych.

static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
{
    DataSet dataSet = new DataSet();

    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbDataAdapter adapter =
            new OleDbDataAdapter();
        adapter.SelectCommand =
            new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder =
            new OleDbCommandBuilder(adapter);

        adapter.Fill(dataSet);

        // Code to modify data in the DataSet here.

        // Without the OleDbCommandBuilder, this line would fail.
        adapter.UpdateCommand = builder.GetUpdateCommand();
        adapter.Update(dataSet);
    }
    return dataSet;
}
Public Function CreateCommandAndUpdate( _
    ByVal connectionString As String, _
    ByVal queryString As String) As DataSet

    Dim dataSet As New DataSet()

    Using connection As New OleDbConnection(connectionString)
        connection.Open()
        Dim adapter As New OleDbDataAdapter()

        adapter.SelectCommand = New OleDbCommand( _
            queryString, connection)

        Dim builder As OleDbCommandBuilder = _
            New OleDbCommandBuilder(adapter)

        adapter.Fill(dataSet)

        ' Code to modify the data in the DataSet here. 

        ' Without the OleDbCommandBuilder this line would fail.
        builder.GetUpdateCommand()
        adapter.Update(dataSet)
    End Using
    Return dataSet
End Function

Uwagi

Aktualizacja jest wykonywana według wierszy. Dla każdego wstawionego, zmodyfikowanego i usuniętego wiersza Update metoda określa typ zmiany, która została wykonana na nim (Wstaw, Aktualizuj lub Usuń). W zależności od typu zmiany InsertUpdate, szablon polecenia lub Delete jest wykonywany w celu propagowania zmodyfikowanego wiersza do źródła danych. Gdy aplikacja wywołuje metodę Update , DataAdapter metoda sprawdza RowState właściwość i wykonuje wymagane instrukcje INSERT, UPDATE lub DELETE iteracyjne dla każdego wiersza na podstawie kolejności indeksów skonfigurowanych w elemecie DataSet. Na przykład Update może wykonać instrukcję DELETE, a następnie instrukcję INSERT, a następnie inną instrukcję DELETE ze względu na kolejność wierszy w DataTableobiekcie .

Należy zauważyć, że te instrukcje nie są wykonywane jako proces wsadowy; każdy wiersz jest aktualizowany indywidualnie. Aplikacja może wywołać metodę GetChanges w sytuacjach, w których należy kontrolować sekwencję typów instrukcji (na przykład INSERT przed aktualizacją). Aby uzyskać więcej informacji, zobacz Aktualizowanie źródeł danych za pomocą elementów DataAdapters.

Jeśli instrukcje INSERT, UPDATE lub DELETE nie zostały określone, Update metoda generuje wyjątek. Można jednak utworzyć SqlCommandBuilder obiekt lubOleDbCommandBuilder, aby automatycznie wygenerować instrukcje SQL dla aktualizacji pojedynczej tabeli, jeśli ustawisz SelectCommand właściwość dostawcy danych .NET Framework. Następnie wszystkie dodatkowe instrukcje SQL, które nie zostały ustawione, są generowane przez program CommandBuilder. Ta logika generowania wymaga, aby informacje o kolumnie klucza znajdują się w elemecie DataSet. Aby uzyskać więcej informacji, zobacz Generowanie poleceń za pomocą poleceń CommandBuilders.

Metoda Update pobiera wiersze z tabeli wymienionej w pierwszym mapowaniu przed wykonaniem aktualizacji. Następnie Update odświeża wiersz przy użyciu wartości UpdatedRowSource właściwości. Wszystkie zwracane dodatkowe wiersze są ignorowane.

Po załadowaniu DataSetOnRowUpdated danych z powrotem do elementu zdarzenie zostanie podniesione, co umożliwia użytkownikowi sprawdzenie uzgadnianego DataSet wiersza i wszystkich parametrów wyjściowych zwróconych przez polecenie . Po pomyślnym zaktualizowaniu wiersza zmiany w tym wierszu zostaną zaakceptowane.

W przypadku używania polecenia Updatekolejność wykonywania jest następująca:

  1. Wartości w elemecie DataRow są przenoszone do wartości parametrów.

  2. Zdarzenie OnRowUpdating jest zgłaszane.

  3. Polecenie jest wykonywane.

  4. Jeśli polecenie jest ustawione na FirstReturnedRecordwartość , pierwszy zwrócony wynik zostanie umieszczony w elemecie DataRow.

  5. Jeśli istnieją parametry wyjściowe, są one umieszczane w elemecie DataRow.

  6. Zdarzenie OnRowUpdated jest zgłaszane.

  7. Wywołano metodę DataRow.AcceptChanges. Spowoduje to podniesienie zarówno zdarzeń, jak DataTable.RowChanging i DataTable.RowChanged dla zaktualizowanego DataRowelementu .

Każde polecenie skojarzone z elementem DataAdapter zwykle ma skojarzona z nim kolekcję parametrów. Parametry są mapowane na bieżący wiersz za pomocą SourceColumn właściwości i SourceVersion klasy dostawcy danych platformy Parameter .NET. SourceColumn Odwołuje się do DataTable kolumny, DataAdapter do którego odwołuje się do uzyskiwania wartości parametrów dla bieżącego wiersza.

SourceColumn odwołuje się do niezamapowanej nazwy kolumny przed zastosowaniem mapowań tabeli. Jeśli SourceColumn odwołuje się do nieistniejących kolumn, podjęta akcja zależy od jednej z następujących MissingMappingAction wartości.

Wartość wyliczenia Podjęto akcję
MissingMappingAction.Passthrough Użyj nazw kolumn źródłowych i nazw tabel w tabeli DataSet , jeśli nie ma mapowania.
MissingMappingAction.Ignore Wartość A SystemException jest generowana. Gdy mapowania są jawnie ustawione, brakujące mapowanie parametru wejściowego jest zwykle wynikiem błędu.
MissingMappingAction.Error Wartość A SystemException jest generowana.

Właściwość SourceColumn jest również używana do mapowania wartości parametrów wyjściowych lub wejściowych/wyjściowych z powrotem na DataSetwartość . Wyjątek jest generowany, jeśli odwołuje się do nieistnienej kolumny.

Właściwość SourceVersion klasy dostawcy Parameter danych platformy .NET określa, czy należy użyć oryginalnej, bieżącej lub proponowanej wersji wartości kolumny. Ta funkcja jest często używana do uwzględnienia oryginalnych wartości w klauzuli WHERE instrukcji UPDATE w celu sprawdzenia pod kątem optymistycznych naruszeń współbieżności.

AcceptChanges Wywołanie metody lub AcceptChanges metody spowoduje zatwierdzenie wszystkich zmian w obiekcie DataSet lub DataTable. Jeśli żadna z tych metod jest wywoływana przed wywołaniem Update metody, nie zostaną zatwierdzone żadne zmiany, Update jeśli metoda zostanie wywołana, chyba że wprowadzono dalsze zmiany od AcceptChanges tego czasu lub AcceptChanges zostały wywołane.

Uwaga

Jeśli podczas aktualizowania wiersza wystąpi błąd, zgłaszany jest wyjątek, a wykonanie aktualizacji zostanie przerwane. Aby kontynuować operację aktualizacji bez generowania wyjątków po napotkaniu błędu, ustaw ContinueUpdateOnError właściwość na wartość true przed wywołaniem metody Update. Możesz również reagować na błędy dla poszczególnych wierszy w RowUpdated przypadku zdarzenia DataAdapter. Aby kontynuować operację aktualizacji bez generowania wyjątku w zdarzeniu RowUpdated , ustaw Status właściwość elementu RowUpdatedEventArgs na Continue.

Dla każdej kolumny, która jest propagowana do źródła danych w systemie Update, parametr powinien zostać dodany do InsertCommandelementu , UpdateCommandlub DeleteCommand. Właściwość SourceColumn parametru powinna być ustawiona na nazwę kolumny. To ustawienie wskazuje, że wartość parametru nie jest ustawiana ręcznie, ale jest pobierana z określonej kolumny w aktualnie przetworzonym wierszu.

Dotyczy

Zobacz też