DataAdapter.Update(DataSet) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
public:
virtual int Update(System::Data::DataSet ^ dataSet);
public:
abstract int Update(System::Data::DataSet ^ dataSet);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public virtual int Update(System.Data.DataSet dataSet);
public virtual int Update(System.Data.DataSet dataSet);
public abstract int Update(System.Data.DataSet dataSet);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
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
Zwraca
Liczba wierszy pomyślnie zaktualizowanych z elementu DataSet.
Implementuje
- Atrybuty
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, zostanie wykonany szablon polecenia lub Delete , aby propagować zmodyfikowany wiersz do źródła danych. Gdy aplikacja wywołuje Update metodę, DataAdapter funkcja 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 obiekcie 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 lub OleDbCommandBuilder w celu automatycznego generowania instrukcji SQL dla aktualizacji z jedną tabelą, jeśli ustawisz SelectCommand właściwość dostawcy danych programu .NET Framework. Następnie wszystkie dodatkowe instrukcje SQL, które nie zostały ustawione, są generowane przez narzędzie CommandBuilder. Ta logika generowania wymaga obecności informacji o kolumnie klucza w obiekcie 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 wszystkich danych z powrotem do zdarzenia jest wywoływane, 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:
Wartości w elemecie DataRow są przenoszone do wartości parametrów.
Zdarzenie OnRowUpdating jest zgłaszane.
Polecenie jest wykonywane.
Jeśli polecenie jest ustawione na
FirstReturnedRecordwartość , pierwszy zwrócony wynik zostanie umieszczony w elemecie DataRow.Jeśli istnieją parametry wyjściowe, są one umieszczane w pliku DataRow.
Zdarzenie OnRowUpdated jest zgłaszane.
DataRow.AcceptChanges jest wywoływane. Spowoduje to wywołanie zarówno zdarzeń, jak DataTable.RowChanging i DataTable.RowChanged dla zaktualizowanego DataRowelementu .
Każde polecenie skojarzone z obiektem DataAdapter zwykle ma skojarzona kolekcja 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 kolumny, do DataTable których DataAdapter 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 |
Zostanie wygenerowana wartość A SystemException . Gdy mapowania są jawnie ustawione, brakujące mapowanie parametru wejściowego jest zwykle wynikiem błędu. |
MissingMappingAction.Error |
Zostanie wygenerowana wartość A SystemException . |
Właściwość SourceColumn jest również używana do mapowania wartości parametrów wyjściowych lub wejściowych/wyjściowych DataSetz powrotem na wartość . 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 elemecie DataSet lub DataTable. Jeśli którakolwiek z tych metod jest wywoływana przed wywołaniem Update metody, nie zostaną zatwierdzone żadne zmiany, jeśli Update metoda zostanie wywołana, chyba że wprowadzono dalsze zmiany od AcceptChanges czasu wywołania lub AcceptChanges zostały wywołane.
Uwaga / Notatka
Jeśli podczas aktualizowania wiersza wystąpi błąd, zgłaszany jest wyjątek, a wykonanie aktualizacji nie zostanie zakończone. Aby kontynuować operację aktualizacji bez generowania wyjątków w przypadku wystąpienia 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 ramach 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 Updateusłudze , 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.