Sdílet prostřednictvím


DataAdapter.Update(DataSet) Metoda

Definice

Volá příslušné příkazy INSERT, UPDATE nebo DELETE pro každý vložený, aktualizovaný nebo odstraněný řádek v zadaném DataSet z pojmenovaného DataTable "Tabulka".

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

Slouží DataSet k aktualizaci zdroje dat.

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 Insertspustí š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í:

  1. Hodnoty v parametru DataRow se přesunou do hodnot parametrů.

  2. Událost OnRowUpdating je vyvolána.

  3. Příkaz se spustí.

  4. Pokud je příkaz nastavený na FirstReturnedRecordhodnotu , první vrácený výsledek se umístí do DataRow.

  5. Pokud existují výstupní parametry, umístí se do DataRow.

  6. Událost OnRowUpdated je vyvolána.

  7. 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 , UpdateCommandnebo DeleteCommandpřidán InsertCommandparametr . 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.

Platí pro

Viz také