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);
[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
Návraty
Počet řádků se úspěšně aktualizoval z objektu DataSet.
Implementuje
- Atributy
Výjimky
Zdrojová tabulka je neplatná.
Výsledkem pokusu o spuštění příkazu INSERT, UPDATE nebo DELETE byly nulové záznamy ovlivněné.
Příklady
Následující příklad používá odvozenou třídu , OleDbDataAdapter, ke Update zdroji dat.
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 řádech. Pro každý vložený, změněný a odstraněný řádek určuje Update metoda typ změny, která s ní byla provedena (Insert, Update nebo Delete). V závislosti na typu změny InsertUpdate, se šablona příkazu nebo Delete , která rozšíří upravený řádek do zdroje dat. Když aplikace volá metodu Update , DataAdapter prozkoumá RowState vlastnost a spustí požadované příkazy INSERT, UPDATE nebo DELETE iterativní pro každý řádek na základě pořadí indexů nakonfigurovaných v sadě DataSet. Můžete například Update spustit příkaz DELETE, následovaný příkazem INSERT a dalším příkazem DELETE, a to z důvodu řazení řádků v objektu DataTable.
Je třeba poznamenat, že tyto příkazy nejsou prováděny jako dávkové procesy; každý řádek se aktualizuje jednotlivě. Aplikace může volat metodu GetChanges v situacích, kdy musíte řídit posloupnost typů příkazů (například INSERT před aktualizací). Další informace naleznete 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 ale nastavíte SelectCommand vlastnost zprostředkovatele dat rozhraní .NET Framework, můžete vytvořit SqlCommandBuilder nebo OleDbCommandBuilder objekt, který automaticky vygeneruje příkazy SQL pro aktualizace s jednou tabulkou. Pak všechny další příkazy SQL, které nenastavíte, jsou generovány CommandBuilder. Tato logika generování vyžaduje, aby informace o klíčovém sloupci byly přítomny v objektu DataSet. Další informace naleznete 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 událost je vyvolána, což uživateli umožní zkontrolovat odsouhlasené DataSet řádky a všechny výstupní parametry vrácené příkazem. Po úspěšné aktualizaci řádku se změny v daném řádku přijmou.
Při použití Updateje pořadí provádění následující:
Hodnoty v objektu DataRow jsou přesunuty do hodnot parametrů.
Událost OnRowUpdating je vyvolána.
Příkaz se spustí.
Pokud je příkaz nastaven na
FirstReturnedRecord, pak první vrácený výsledek je umístěn v sadě DataRow.Pokud jsou k dispozici výstupní parametry, umístí se do DataRowpole .
Událost OnRowUpdated je vyvolána.
DataRow.AcceptChanges se volá. Tím dojde k DataTable.RowChanging vyvolání událostí aktualizace i DataTable.RowChanged událostí DataRow.
Každý příkaz přidružený k DataAdapter obvykle má přidruženou kolekci parametrů. Parametry se mapují na aktuální řádek prostřednictvím SourceColumn vlastností SourceVersion třídy zprostředkovatele Parameter dat .NET.
SourceColumn odkazuje na DataTable sloupec, který DataAdapter odkazuje na získání hodnot parametrů pro aktuální řádek.
SourceColumn odkazuje na název nemapovaného sloupce před provedením mapování tabulek. Pokud SourceColumn odkazuje na neexistující sloupec, akce, která byla provedena, závisí na jedné z následujících MissingMappingAction hodnot.
| Výčtová hodnota | Přijatá akce |
|---|---|
MissingMappingAction.Passthrough |
Pokud neexistuje mapování, použijte názvy zdrojových sloupců a názvy DataSet tabulek. |
MissingMappingAction.Ignore |
Vygeneruje se A SystemException . Pokud jsou mapování explicitně nastavena, chybějící mapování vstupního parametru je obvykle výsledkem chyby. |
MissingMappingAction.Error |
Vygeneruje se A SystemException . |
Vlastnost SourceColumn se také používá k mapování hodnoty pro výstupní nebo vstupní/výstupní parametry zpět na DataSethodnotu . 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 Original, Current 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 porušení optimistické souběžnosti.
AcceptChanges Volání metody nebo AcceptChanges metody potvrdí všechny změny v nebo DataSetDataTable. Pokud jsou některé z těchto metod volána před Update zavolání metody, nebudou potvrzeny žádné změny při Update zavolání metody, pokud nebyly provedeny další změny od nebo AcceptChangesAcceptChanges byl volána.
Poznámka:
Pokud při aktualizaci řádku dojde k chybě, vyvolá se výjimka a spuštění aktualizace se ukončí. Chcete-li pokračovat v operaci aktualizace bez generování výjimek při výskytu chyby, nastavte ContinueUpdateOnError vlastnost před true voláním Update. Můžete také reagovat na chyby na základě jednotlivých řádků v RowUpdated rámci události DataAdapter. Chcete-li pokračovat v operaci aktualizace bez generování výjimky v rámci RowUpdated události, nastavte Status vlastnost RowUpdatedEventArgs na Continuehodnotu .
Pro každý sloupec, který rozšíříte do zdroje dat, Updateby měl být parametr přidán do InsertCommandUpdateCommand, nebo DeleteCommand. Vlastnost SourceColumn parametru by měla být nastavena na název sloupce. Toto nastavení označuje, že hodnota parametru není nastavena ručně, ale přebírá se z konkrétního sloupce v aktuálně zpracovaném řádku.