Sdílet prostřednictvím


IDataAdapter.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 "Table".

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

dataSet
DataSet

Slouží DataSet k aktualizaci zdroje dat.

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

  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 vloží do DataRow.

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

  6. Událost OnRowUpdated je vyvolána.

  7. 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, Currentzda 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.

Platí pro