IDataAdapter.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:
int Update(System::Data::DataSet ^ dataSet);
public int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
Public Function Update (dataSet As DataSet) As Integer
Parametry
Návraty
Počet řádků, které byly úspěšně aktualizovány z .DataSet
Výjimky
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 V tomto příkladu se předpokládá, že jste vytvořili objekty OleDbDataAdapter a DataSet.
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
Když aplikace volá metodu Update , IDataAdapter 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 spustit příkaz DELETE následovaný příkazem INSERT a dalším příkazem DELETE, a to z důvodu pořadí řádků v DataTable.
Mějte na paměti, že tyto příkazy nejsou prováděny jako dávkové procesy; každý řádek se aktualizuje zvlášť. Aplikace může volat metodu GetChanges , pokud musíte řídit sekvenci typů příkazů (například INSERTs před UPDATEs). 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. Potom 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 vloží do DataRow.Pokud existují výstupní parametry, zadají se do DataRow.
Událost OnRowUpdated je vyvolána.
Volá se AcceptChanges.
Každý příkaz přidružený k příkazu IDataAdapter 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 rozhraní .NET Framework.
SourceColumn
odkazuje na DataTable sloupec, který IDataAdapter 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.
Hodnota výčtu | 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í vstupního parametru je obvykle způsobeno chybou. |
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 rozhraní .NET Framework určuje, Current
zda se má použít Original
, nebo Proposed
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.
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.