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 textu z pojmenované DataTable tabulky.

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

dataSet
DataSet

DataSet sloužící k aktualizaci zdroje dat.

Návraty

Počet řádků úspěšně aktualizován z 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á Update metodu, DataAdapter zkontroluje RowState vlastnost a provede požadované příkazy INSERT, UPDATE nebo DELETE iterativně pro každý řádek na základě pořadí indexů nakonfigurovaných v DataSet. Například Update může spustit příkaz DELETE, následovaný příkazem INSERT a dalším příkazem DELETE, protože 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 jednotlivě. Aplikace může volat GetChanges metodu 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 nebyly zadány příkazy INSERT, UPDATE nebo DELETE, metoda Update vygeneruje výjimku. Pokud ale nastavíte SqlCommandBuilder vlastnost zprostředkovatele dat rozhraní .NET Framework, můžete vytvořit OleDbCommandBuilder nebo SelectCommand objekt, který automaticky vygeneruje příkazy SQL pro aktualizace s jednou tabulkou. Potom 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 před provedením aktualizace načte řádky z tabulky uvedené v prvním mapování. Update potom aktualizuje řádek pomocí hodnoty vlastnosti UpdatedRowSource. Všechny další vrácené řádky se ignorují.

Po načtení všech dat zpět do DataSetse vyvolá událost OnRowUpdated, která uživateli umožní zkontrolovat odsouhlasené DataSet řádek 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í:

  1. Hodnoty v 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 FirstReturnedRecord, pak se první vrácený výsledek umístí do DataRow.

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

  6. Událost OnRowUpdated je vyvolána.

  7. 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 má obvykle 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 sloupec DataTable, na který DataAdapter odkazuje na získání hodnot parametrů pro aktuální řádek.

SourceColumn odkazuje na název nemapovaného sloupce dříve, než se použijí 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 tabulek v DataSet.
MissingMappingAction.Ignore Vygeneruje se SystemException. Pokud jsou mapování explicitně nastavena, chybějící mapování vstupního parametru je obvykle výsledkem chyby.
MissingMappingAction.Error Vygeneruje se SystemException.

Vlastnost SourceColumn slouží také 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 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.

Note

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 vlastnost ContinueUpdateOnError na true před voláním Update. V RowUpdated události DataAdapter můžete také reagovat na chyby na základě jednotlivých řádků. Chcete-li pokračovat v operaci aktualizace bez generování výjimky v rámci události RowUpdated, nastavte vlastnost StatusRowUpdatedEventArgs na Continue.

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.

Platí pro

Viz také