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

Definizione

Chiama le rispettive istruzioni INSERT, UPDATE o DELETE per ogni inserito, aggiornato o eliminato righe nell'oggetto specificato DataSet da un 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

Il DataSet usato per aggiornare l'origine dati.The DataSet used to update the data source.

Restituisce

Il numero di righe aggiornate correttamente dal DataSet.The number of rows successfully updated from the DataSet.

Implementazioni

Eccezioni

La tabella di origine non è valida.The source table is invalid.

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

Esempi

L'esempio seguente usa la classe derivata OleDbDataAdapter, a Update 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 a una per riga.The update is performed on a by-row basis. Per tutte le righe inserite, modificate ed eliminate, le Update metodo determina il tipo di modifica che è stata eseguita su di esso (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, la Insert, Update, o Delete viene eseguito il modello di comando 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, il DataAdapter esamina la RowState proprietà ed esegue le necessarie istruzioni INSERT, UPDATE o DELETE 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 potrebbe eseguire un'istruzione DELETE, seguita da un'istruzione INSERT e quindi un'altra istruzione DELETE, a causa dell'ordinamento delle righe di DataTable.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 un processo batch. ogni riga viene aggiornata separatamente.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 nelle 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 altre informazioni, vedere l'aggiornamento di origini dati con DataAdapter.For more information, see Updating Data Sources with DataAdapters.

Se le istruzioni INSERT, UPDATE o DELETE non sono state specificate, 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 oppure OleDbCommandBuilder oggetto per generare automaticamente le istruzioni SQL per gli aggiornamenti di tabella singola, se si imposta il SelectCommand 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. Successivamente, vengono generate le istruzioni SQL aggiuntive che non si imposta per il CommandBuilder.Then, any additional SQL statements that you do not set are generated by the CommandBuilder. Questa logica per la generazione richiede informazioni della colonna chiave siano presenti nel DataSet.This generation logic requires key column information to be present in the DataSet. Per altre informazioni, vedere generazione di comandi tramite commandbuilders.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. Il Update aggiorna quindi la riga usando il valore della UpdatedRowSource proprietà.The Update then refreshes the row using the value of the UpdatedRowSource property. Tutte le eventuali righe restituite vengono ignorate.Any additional rows returned are ignored.

Dopo il caricamento di tutti i dati nel DataSet, il OnRowUpdated viene generato l'evento, consentendo all'utente di controllare il riconciliato DataSet righe ed eventuali 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. Dopo che una riga viene aggiornata correttamente, vengono accettate le modifiche apportate a tale riga.After a row updates successfully, the changes to that row are accepted.

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

  1. I valori di DataRow vengono spostati i 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. L'esecuzione del comando.The command executes.

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

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

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

  7. Chiamata del metodo DataRow.AcceptChanges.DataRow.AcceptChanges is called. In tal modo verrà generato sia la DataTable.RowChanging e DataTable.RowChanged eventi per l'aggiornamento DataRow.This will raise both the DataTable.RowChanging and DataTable.RowChanged events for the updated DataRow.

Ogni comando associato il DataAdapter ha in genere una raccolta di parametri associata.Each command associated with the DataAdapter usually has a parameters collection associated with it. I parametri sono mappati alla riga corrente tramite il SourceColumn e SourceVersion delle proprietà di un provider di dati .NET Parameter classe.Parameters are mapped to the current row through the SourceColumn and SourceVersion properties of a .NET data provider's Parameter class. SourceColumn fa riferimento a un DataTable colonna che la DataAdapter riferimenti a 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.

SourceColumn fa riferimento al nome della colonna non mappata prima sono stati applicati tutti i 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 seguenti MissingMappingAction valori.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 Usare i nomi delle colonne di origine e nomi di tabella il DataSet se è presente alcun mapping.Use the source column names and table names in the DataSet if no mapping is present.
MissingMappingAction.Ignore Oggetto SystemException viene generato.A SystemException is generated. Quando i mapping sono impostati in modo esplicito, un mancano i mapping 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 Oggetto SystemException viene generato.A SystemException is generated.

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

Il SourceVersion proprietà di un provider di dati .NET Parameter classe determina se utilizzare la versione originale, corrente o proposto 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 la presenza di eventuali violazioni alla 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.

Chiama il AcceptChanges metodo o AcceptChanges metodo verrà eseguito il commit di tutte le modifiche nel DataSet o DataTable.Calling the AcceptChanges method or AcceptChanges method will commit all changes in the DataSet or DataTable. Se uno di questi metodi vengono chiamato prima la Update viene chiamato il metodo, modifiche non verrà eseguito il commit quando il Update viene chiamato il metodo a meno che non sono state apportate altre modifiche AcceptChanges o AcceptChanges è stato chiamato.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 non è più disponibile.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 il ContinueUpdateOnError proprietà true prima di chiamare Update.To continue the update operation without generating exceptions when an error is encountered, set the ContinueUpdateOnError property to true before calling Update. È anche possibile rispondere agli errori in base per ogni riga all'interno di RowUpdated eventi 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'interno di RowUpdated set di eventi, il Status proprietà del RowUpdatedEventArgs a Continue.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 che viene propagata all'origine dati nel Update, è necessario aggiungere un parametro per il InsertCommand, UpdateCommand, o DeleteCommand.For every column that you propagate to the data source on Update, a parameter should be added to the InsertCommand, UpdateCommand, or DeleteCommand. Il 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 non viene eseguito dalla colonna particolare 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