DataAdapter.Update(DataSet) DataAdapter.Update(DataSet) DataAdapter.Update(DataSet) Method

Definizione

Chiama le corrispondenti istruzioni INSERT, UPDATE o DELETE per ciascuna riga inserita, aggiornata o eliminata nell'oggetto DataSet specificato da un oggetto DataTable denominato "Table."Calls the respective INSERT, UPDATE, or DELETE statements for each inserted, updated, or deleted row in the specified DataSet from a DataTable named "Table."

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int

Parametri

dataSet
DataSet DataSet DataSet

L'oggetto DataSet utilizzato per aggiornare l'origine dati.The DataSet used to update the data source.

Restituisce

Numero di righe aggiornate correttamente dall'oggetto DataSet.The number of rows successfully updated from the DataSet.

Implementazioni

Eccezioni

Tabella di origine non valida.The source table is invalid.

Un tentativo di esecuzione di un'istruzione INSERT, UPDATE o DELETE non ha avuto effetto su alcun record.An attempt to execute an INSERT, UPDATE, or DELETE statement resulted in zero records affected.

Esempi

Nell'esempio seguente viene utilizzata la classe derivata OleDbDataAdapter,, Update per l'origine dati.The following example uses the derived class, OleDbDataAdapter, to Update the data source.

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 DataSet = 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

Commenti

L'aggiornamento viene eseguito in base alle righe.The update is performed on a by-row basis. Per ogni riga inserita, modificata ed eliminata, il Update metodo determina il tipo di modifica che è stata eseguita (Insert, Update o DELETE).For every inserted, modified, and deleted row, the Update method determines the type of change that has been performed on it (Insert, Update or Delete). A seconda del tipo di modifica, il Insert Update, modello di comando Delete o viene eseguito per propagare la riga modificata nell'origine dati.Depending on the type of change, the Insert, Update, or Delete command template executes to propagate the modified row to the data source. Quando un'applicazione chiama il Update metodo DataAdapter , esamina la RowState proprietà ed esegue le istruzioni INSERT, Update o DELETE richieste in modo iterativo per ogni riga, in base all'ordine degli indici configurati nel DataSet.When an application calls the Update method, the DataAdapter examines the RowState property, and executes the required INSERT, UPDATE, or DELETE statements iteratively for each row, based on the order of the indexes configured in the DataSet. Ad esempio, Update può eseguire un'istruzione DELETE, seguito da un'istruzione INSERT e quindi da un'altra istruzione DELETE, a causa dell'ordinamento delle righe DataTablein.For example, Update might execute a DELETE statement, followed by an INSERT statement, and then another DELETE statement, due to the ordering of the rows in the DataTable.

Si noti che queste istruzioni non vengono eseguite come processo batch. ogni riga viene aggiornata singolarmente.It should be noted that these statements are not performed as a batch process; each row is updated individually. Un'applicazione può chiamare il GetChanges metodo in situazioni in cui è necessario controllare la sequenza di tipi di istruzione (ad esempio, inserire prima dell'aggiornamento).An application can call the GetChanges method in situations where you must control the sequence of statement types (for example, INSERT before UPDATE). Per ulteriori informazioni, vedere aggiornamento di origini dati con DataAdapter.For more information, see Updating Data Sources with DataAdapters.

Se non sono state specificate istruzioni INSERT, Update o DELETE, il Update metodo genera un'eccezione.If INSERT, UPDATE, or DELETE statements have not been specified, the Update method generates an exception. Tuttavia, è possibile creare un SqlCommandBuilder oggetto OleDbCommandBuilder o per generare automaticamente istruzioni SQL per gli aggiornamenti di una singola tabella se si SelectCommand imposta la proprietà di un provider di dati .NET Framework.However, you can create a SqlCommandBuilder or OleDbCommandBuilder object to automatically generate SQL statements for single-table updates if you set the SelectCommand property of a .NET Framework data provider. Quindi, eventuali istruzioni SQL aggiuntive che non vengono impostate vengono generate da CommandBuilder.Then, any additional SQL statements that you do not set are generated by the CommandBuilder. Questa logica di generazione richiede che le informazioni sulle colonne chiave siano DataSetpresenti in.This generation logic requires key column information to be present in the DataSet. Per altre informazioni, vedere generazione di comandi con CommandBuilder.For more information see Generating Commands with CommandBuilders.

Il Update metodo recupera le righe dalla tabella elencata nel primo mapping prima di eseguire un aggiornamento.The Update method retrieves rows from the table listed in the first mapping before performing an update. La Update riga viene quindi aggiornata usando il valore UpdatedRowSource della proprietà.The Update then refreshes the row using the value of the UpdatedRowSource property. Eventuali righe aggiuntive restituite verranno ignorate.Any additional rows returned are ignored.

Dopo che i dati sono stati caricati in DataSet, viene OnRowUpdated generato l'evento, che consente all'utente DataSet di esaminare la riga riconciliata e tutti i parametri di output restituiti dal comando.After any data is loaded back into the DataSet, the OnRowUpdated event is raised, allowing the user to inspect the reconciled DataSet row and any output parameters returned by the command. Quando una riga viene aggiornata correttamente, vengono accettate le modifiche apportate alla riga.After a row updates successfully, the changes to that row are accepted.

Quando si UpdateUSA, l'ordine di esecuzione è il seguente:When using Update, the order of execution is as follows:

  1. I valori in DataRow vengono spostati nei valori dei parametri.The values in the DataRow are moved to the parameter values.

  2. Viene generato l'evento OnRowUpdating.The OnRowUpdating event is raised.

  3. Il comando viene eseguito.The command executes.

  4. Se il comando è impostato su FirstReturnedRecord, il primo risultato restituito verrà inserito DataRowin.If the command is set to FirstReturnedRecord, then the first returned result is placed in the DataRow.

  5. Se sono presenti parametri di output, vengono inseriti in DataRow.If there are output parameters, they are placed in the DataRow.

  6. Viene generato l'evento OnRowUpdated.The OnRowUpdated event is raised.

  7. Viene chiamato DataRow.AcceptChanges.DataRow.AcceptChanges is called. Questo genererà gli eventi DataTable.RowChanged DataRoweper DataTable.RowChanging l'oggetto aggiornato.This will raise both the DataTable.RowChanging and DataTable.RowChanged events for the updated DataRow.

Ogni comando associato a DataAdapter ha in genere una raccolta di parametri associata.Each command associated with the DataAdapter usually has a parameters collection associated with it. Viene eseguito il mapping dei parametri alla riga corrente SourceColumn tramite SourceVersion le proprietà e della Parameter classe di un provider di dati .NET.Parameters are mapped to the current row through the SourceColumn and SourceVersion properties of a .NET data provider's Parameter class. SourceColumnfa riferimento a DataTable una colonna a DataAdapter cui si fa riferimento per ottenere i valori dei parametri per la riga corrente.SourceColumn refers to a DataTable column that the DataAdapter references to obtain parameter values for the current row.

SourceColumnfa riferimento al nome di colonna non mappato prima dell'applicazione di qualsiasi mapping di tabella.SourceColumn refers to the unmapped column name before any table mappings have been applied. Se SourceColumn fa riferimento a una colonna inesistente, l'azione eseguita dipende da uno dei valori MissingMappingAction seguenti.If SourceColumn refers to a nonexistent column, the action taken depends on one of the following MissingMappingAction values.

Valore di enumerazioneEnumeration value Azione intrapresaAction taken
MissingMappingAction.Passthrough Utilizzare i nomi di colonna e di tabella di origine DataSet in se non è presente alcun mapping.Use the source column names and table names in the DataSet if no mapping is present.
MissingMappingAction.Ignore Viene SystemException generato un oggetto.A SystemException is generated. Quando i mapping vengono impostati in modo esplicito, un mapping mancante per un parametro di input è in genere il risultato di un errore.When the mappings are explicitly set, a missing mapping for an input parameter is usually the result of an error.
MissingMappingAction.Error Viene SystemException generato un oggetto.A SystemException is generated.

La SourceColumn proprietà viene usata anche per eseguire il mapping del valore per i parametri di output o di input DataSet/output a.The SourceColumn property is also used to map the value for output or input/output parameters back to the DataSet. Viene generata un'eccezione se fa riferimento a una colonna inesistente.An exception is generated if it refers to a nonexistent column.

La SourceVersion proprietà della Parameter classe di un provider di dati .NET determina se utilizzare la versione originale, corrente o proposta del valore della colonna.The SourceVersion property of a .NET data provider's Parameter class determines whether to use the Original, Current, or Proposed version of the column value. Questa funzionalità viene spesso utilizzata per includere i valori originali nella clausola WHERE di un'istruzione UPDATE per verificare le violazioni della concorrenza ottimistica.This capability is often used to include original values in the WHERE clause of an UPDATE statement to check for optimistic concurrency violations.

La chiamata AcceptChanges al metodo AcceptChanges o al metodo eseguirà il DataSet commit di DataTabletutte le modifiche in o.Calling the AcceptChanges method or AcceptChanges method will commit all changes in the DataSet or DataTable. Se uno di questi metodi viene chiamato prima della Update chiamata al metodo, non verrà eseguito il commit delle modifiche Update quando viene chiamato il metodo, a meno che non siano state AcceptChanges apportate altre modifiche dopo la chiamata di o AcceptChanges .If either of these methods are called before the Update method is called, no changes will be committed when the Update method is called, unless further changes have been made since AcceptChanges or AcceptChanges was called.

Nota

Se si verifica un errore durante l'aggiornamento di una riga, viene generata un'eccezione e l'esecuzione dell'aggiornamento viene sospesa.If an error occurs while updating a row, an exception is thrown and execution of the update is discontinued. Per continuare l'operazione di aggiornamento senza generare eccezioni quando viene rilevato un errore, impostare ContinueUpdateOnError la proprietà true su prima Updatedi chiamare.To continue the update operation without generating exceptions when an error is encountered, set the ContinueUpdateOnError property to true before calling Update. È inoltre possibile rispondere agli errori in base alle singole righe all'interno dell' RowUpdated evento di un oggetto DataAdapter.You may also respond to errors on a per-row basis within the RowUpdated event of a DataAdapter. Per continuare l'operazione di aggiornamento senza generare un'eccezione all' RowUpdated interno dell'evento, Status impostare la proprietà RowUpdatedEventArgs di Continuesu.To continue the update operation without generating an exception within the RowUpdated event, set the Status property of the RowUpdatedEventArgs to Continue.

Per ogni colonna propagata all' Updateorigine dati in, è necessario aggiungere un parametro all'oggetto InsertCommand, UpdateCommando DeleteCommand.For every column that you propagate to the data source on Update, a parameter should be added to the InsertCommand, UpdateCommand, or DeleteCommand. La SourceColumn proprietà del parametro deve essere impostata sul nome della colonna.The SourceColumn property of the parameter should be set to the name of the column. Questa impostazione indica che il valore del parametro non è impostato manualmente, ma viene tratto dalla colonna specifica nella riga attualmente elaborata.This setting indicates that the value of the parameter is not set manually, but is taken from the particular column in the currently processed row.

Si applica a

Vedi anche