DataAdapter.Update(DataSet) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
Návraty
Počet řádků, které byly úspěšně aktualizovány z .DataSet
Implementuje
Výjimky
Zdrojová tabulka je neplatná.
Pokus o spuštění příkazu INSERT, UPDATE nebo DELETE způsobil nulový dopad na záznamy.
Příklady
Následující příklad používá pro zdroj dat odvozenou třídu OleDbDataAdapter, .Update
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
Poznámky
Aktualizace se provádí po řádcích. Pro každý vložený, změněný a odstraněný řádek Update určuje metoda typ změny, která byla provedena (vložení, aktualizace nebo odstranění). V závislosti na typu změny se Insert
spustí šablona příkazu , Update,
nebo Delete
, která rozšíří upravený řádek do zdroje dat. Když aplikace volá metodu Update , DataAdapter zkontroluje RowState vlastnost a spustí požadované příkazy INSERT, UPDATE nebo DELETE iterativně pro každý řádek v závislosti na pořadí indexů nakonfigurovaných v DataSet. Update Například může provést příkaz DELETE následovaný příkazem INSERT a dalším příkazem DELETE, a to kvůli pořadí řádků v DataTable.
Je třeba poznamenat, že tyto příkazy nejsou prováděny jako dávkové procesy; každý řádek se aktualizuje zvlášť. Aplikace může volat metodu GetChanges v situacích, kdy musíte řídit posloupnost typů příkazů (například INSERT před UPDATE). Další informace najdete v tématu Aktualizace zdrojů dat pomocí objektů DataAdapter.
Pokud příkazy INSERT, UPDATE nebo DELETE nebyly zadány, Update metoda vygeneruje výjimku. Pokud však nastavíte SelectCommand
vlastnost zprostředkovatele dat rozhraní .NET Framework, můžete vytvořit SqlCommandBuilder objekt nebo OleDbCommandBuilder pro automatické generování příkazů SQL pro aktualizace s jednou tabulkou. Pak se všechny další příkazy SQL, které nenastavíte, vygeneruje CommandBuilder. Tato logika generování vyžaduje, aby informace o klíčovém sloupci DataSetbyly v . Další informace najdete v tématu Generování příkazů pomocí CommandBuilders.
Metoda Update načte řádky z tabulky uvedené v prvním mapování před provedením aktualizace. Pak Update aktualizuje řádek pomocí hodnoty UpdatedRowSource vlastnosti . Všechny další vrácené řádky se ignorují.
Po načtení všech dat zpět do DataSet, OnRowUpdated se vyvolá událost, která uživateli umožní zkontrolovat odsouhlasený DataSet řádek a všechny výstupní parametry vrácené příkazem. Po úspěšné aktualizaci řádku jsou změny v daném řádku přijaty.
Při použití příkazu Updateje pořadí provádění následující:
Hodnoty v parametru DataRow se přesunou do hodnot parametrů.
Událost OnRowUpdating je vyvolána.
Příkaz se spustí.
Pokud je příkaz nastavený na
FirstReturnedRecord
hodnotu , první vrácený výsledek se umístí do DataRow.Pokud existují výstupní parametry, umístí se do DataRow.
Událost OnRowUpdated je vyvolána.
Volá se DataRow.AcceptChanges. Tím se pro aktualizovaný DataRowsoubor vyvolá události a .DataTable.RowChangingDataTable.RowChanged
Každý příkaz přidružený k příkazu DataAdapter má obvykle přidruženou kolekci parametrů. Parametry jsou mapovány na aktuální řádek prostřednictvím SourceColumn
vlastností a SourceVersion
třídy zprostředkovatele Parameter
dat .NET. SourceColumn
odkazuje na DataTable sloupec, který DataAdapter odkazuje k získání hodnot parametrů pro aktuální řádek.
SourceColumn
odkazuje na název nenamapovaného sloupce před tím, než se použije mapování tabulek. Pokud SourceColumn
odkazuje na neexistující sloupec, akce závisí na jedné z následujících MissingMappingAction hodnot.
Výčtová hodnota | Akce byla provedena |
---|---|
MissingMappingAction.Passthrough |
Pokud není k dispozici žádné mapování, použijte názvy zdrojových sloupců a názvy DataSet tabulek. |
MissingMappingAction.Ignore |
Vygeneruje SystemException se . Když jsou mapování explicitně nastavená, chybějící mapování pro vstupní parametr je obvykle výsledkem chyby. |
MissingMappingAction.Error |
Vygeneruje SystemException se . |
Vlastnost se SourceColumn
také používá k mapování hodnoty výstupních nebo vstupních/výstupních parametrů zpět na DataSet
. Výjimka se vygeneruje, pokud odkazuje na neexistující sloupec.
Vlastnost SourceVersion
třídy zprostředkovatele Parameter
dat .NET určuje, zda se má použít původní, aktuální nebo navrhovaná verze hodnoty sloupce. Tato funkce se často používá k zahrnutí původních hodnot do klauzule WHERE příkazu UPDATE ke kontrole narušení optimistické souběžnosti.
Volání metody AcceptChanges nebo metody potvrdí všechny změny v nebo DataSetDataTable.AcceptChanges Pokud jsou některé z těchto metod volána před Update zavolání metody, nebudou při Update zavolání metody potvrzeny žádné změny, pokud nebyly provedeny další změny od AcceptChanges nebo AcceptChanges byly volána.
Poznámka
Pokud při aktualizaci řádku dojde k chybě, vyvolá se výjimka a provádění aktualizace se ukončí. Pokud chcete pokračovat v operaci aktualizace bez generování výjimek při výskytu chyby, nastavte vlastnost před true
voláním ContinueUpdateOnErrorUpdatena hodnotu . V rámci RowUpdated
události datovéhoadapteru můžete také reagovat na chyby po jednotlivých řádcích. Pokud chcete v operaci aktualizace pokračovat bez generování výjimky v rámci RowUpdated
události, nastavte Status vlastnost objektu RowUpdatedEventArgs na Continue.
Pro každý sloupec, který rozšíříte do zdroje dat v Update, by měl být do , UpdateCommand
nebo DeleteCommand
přidán InsertCommand
parametr . Vlastnost SourceColumn
parametru by měla být nastavená na název sloupce. Toto nastavení označuje, že hodnota parametru není nastavena ručně, ale je převzata z konkrétního sloupce v aktuálně zpracovaném řádku.