IDataAdapter.Update(DataSet) Metod

Definition

Anropar respektive INSERT-, UPDATE- eller DELETE-instruktioner för varje infogad, uppdaterad eller borttagen rad i den angivna DataSet från en DataTable med namnet "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

Parametrar

dataSet
DataSet

Används DataSet för att uppdatera datakällan.

Returer

Antalet rader har uppdaterats från DataSet.

Undantag

Ett försök att köra en INSERT-, UPDATE- eller DELETE-instruktion resulterade i att inga poster påverkades.

Exempel

I följande exempel används den härledda klassen , OleDbDataAdaptertill Update datakällan. Det här exemplet förutsätter att du har skapat en OleDbDataAdapter och en 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

Kommentarer

När ett program anropar UpdateRowState metoden IDataAdapter undersöker egenskapen och kör nödvändiga INSERT-, UPDATE- eller DELETE-instruktioner iterativt för varje rad, baserat på ordningen på indexen som konfigurerats i DataSet. Du kan till exempel Update köra en DELETE-instruktion följt av en INSERT-instruktion och sedan en annan DELETE-instruktion på grund av ordningen på raderna DataTablei .

Tänk på att dessa instruktioner inte utförs som en batchprocess. varje rad uppdateras individuellt. Ett program kan anropa GetChanges metoden om du måste styra sekvensen med instruktionstyper (till exempel INSERT före UPDATEs). Mer information finns i Uppdatera datakällor med DataAdapters.

Om INSERT-, UPDATE- eller DELETE-instruktioner inte har angetts Update genererar metoden ett undantag. Du kan dock skapa ett SqlCommandBuilder- eller OleDbCommandBuilder-objekt för att automatiskt generera SQL-instruktioner för uppdateringar med en tabell om du anger egenskapen SelectCommand för en .NET Framework-dataprovider. Sedan genereras eventuella ytterligare SQL-instruktioner som du inte anger av CommandBuilder. Den här generationslogik kräver att information om nyckelkolumner DataSetfinns i . Mer information finns i Generera kommandon med CommandBuilders.

Metoden Update hämtar rader från tabellen som anges i den första mappningen innan en uppdatering utförs. Sedan Update uppdateras raden med egenskapens UpdatedRowSource värde. Eventuella ytterligare rader som returneras ignoreras.

När alla data har lästs in i DataSetOnRowUpdated utlöses händelsen så att användaren kan inspektera den avstämda DataSet raden och eventuella utdataparametrar som returneras av kommandot. När en rad har uppdaterats godkänns ändringarna i den raden.

När du använder Updateär körningsordningen följande:

  1. Värdena i DataRow flyttas till parametervärdena.

  2. Händelsen OnRowUpdating aktiveras.

  3. Kommandot körs.

  4. Om kommandot är inställt på FirstReturnedRecordplaceras det första returnerade resultatet i DataRow.

  5. Om det finns utdataparametrar placeras de i DataRow.

  6. Händelsen OnRowUpdated aktiveras.

  7. AcceptChanges kallas.

Varje kommando som är associerat med IDataAdapter har vanligtvis en parametersamling associerad med den. Parametrar mappas till den aktuella raden via egenskaperna SourceColumn och SourceVersion för en .NET Framework-dataproviderns klass Parameter. SourceColumn refererar till en DataTable kolumn som IDataAdapter refererar till för att hämta parametervärden för den aktuella raden.

SourceColumn refererar till det ommappade kolumnnamnet innan några tabellmappningar har tillämpats. Om SourceColumn refererar till en obefintlig kolumn beror den åtgärd som vidtas på något av följande MissingMappingAction värden.

Uppräkningsvärde Vidtagen åtgärd
MissingMappingAction.Passthrough Använd källkolumnnamnen och tabellnamnen i om DataSet ingen mappning finns.
MissingMappingAction.Ignore A SystemException genereras. När mappningarna uttryckligen anges orsakas en mappning som saknas för en indataparameter vanligtvis av ett fel.
MissingMappingAction.Error A SystemException genereras.

Egenskapen SourceColumn används också för att mappa värdet för utdata- eller indata-/utdataparametrar tillbaka till DataSet. Ett undantag genereras om det refererar till en obefintlig kolumn.

Egenskapen SourceVersion för en .NET Framework-dataproviders klass Parameter avgör om du vill använda Original, Current eller Proposed version av kolumnvärdet. Den här funktionen används ofta för att inkludera ursprungliga värden i WHERE-satsen i en UPDATE-instruktion för att söka efter optimistiska samtidighetsöverträdelser.

Note

Om ett fel uppstår när en rad uppdateras utlöses ett undantag och körningen av uppdateringen avbryts. Om du vill fortsätta uppdateringsåtgärden utan att generera undantag när ett fel påträffas anger du ContinueUpdateOnError egenskapen till true innan du anropar Update. Du kan också svara på fel per rad i RowUpdated händelse av en DataAdapter. Om du vill fortsätta uppdateringsåtgärden RowUpdated utan att generera ett undantag i händelsen anger du Status egenskapen RowUpdatedEventArgs för till Continue.

Gäller för