DataAdapter.Update(DataSet) Metodo

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

public:
 virtual int Update(System::Data::DataSet ^ dataSet);
public:
 abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
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

Parametri

dataSet
DataSet

L'oggetto DataSet utilizzato per aggiornare l'origine dati.

Restituisce

Numero di righe aggiornate correttamente dall'oggetto DataSet.

Implementazioni

Eccezioni

Tabella di origine non valida.

Un tentativo di esecuzione di un'istruzione INSERT, UPDATE o DELETE non ha avuto effetto su alcun record.

Esempio

Nell'esempio seguente viene usata la classe derivata, OleDbDataAdapter, all'origine Update dati.

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

Commenti

L'aggiornamento viene eseguito su base di riga. Per ogni riga inserita, modificata ed eliminata, il Update metodo determina il tipo di modifica eseguita su di esso (Insert, Update o Delete). A seconda del tipo di modifica, il Insertmodello di comando o Update,Delete viene eseguito per propagare la riga modificata all'origine dati. Quando un'applicazione chiama il Update metodo, l'oggetto DataAdapter esamina la RowState proprietà ed esegue le istruzioni INSERT, UPDATE o DELETE necessarie in modo iterativo per ogni riga, in base all'ordine degli indici configurati in DataSet. Ad esempio, Update potrebbe eseguire un'istruzione DELETE, seguita da un'istruzione INSERT e quindi da un'altra istruzione DELETE, a causa dell'ordinamento delle righe in DataTable.

Si noti che queste istruzioni non vengono eseguite come processo batch; ogni riga viene aggiornata singolarmente. Un'applicazione può chiamare il GetChanges metodo in situazioni in cui è necessario controllare la sequenza di tipi di istruzione, ad esempio INSERT prima di UPDATE. Per altre informazioni, vedere Aggiornamento delle origini dati con DataAdapters.

Se le istruzioni INSERT, UPDATE o DELETE non sono state specificate, il Update metodo genera un'eccezione. È tuttavia possibile creare un SqlCommandBuilder oggetto o OleDbCommandBuilder per generare automaticamente istruzioni SQL per gli aggiornamenti a tabella singola se si imposta la SelectCommand proprietà di un provider di dati .NET Framework. Le istruzioni SQL aggiuntive che non vengono impostate vengono quindi generate da CommandBuilder. Questa logica di generazione richiede che le informazioni sulla colonna chiave siano presenti in DataSet. Per altre informazioni, vedere Generazione di comandi con CommandBuilders.

Il Update metodo recupera le righe dalla tabella elencate nel primo mapping prima di eseguire un aggiornamento. Aggiorna Update quindi la riga usando il valore della UpdatedRowSource proprietà. Tutte le righe aggiuntive restituite vengono ignorate.

Dopo che tutti i dati vengono caricati nell'oggetto DataSet, l'evento OnRowUpdated viene generato, consentendo all'utente di esaminare la riga riconciliata DataSet e i parametri di output restituiti dal comando. Dopo l'aggiornamento di una riga, le modifiche apportate a tale riga vengono accettate.

Quando si usa Update, l'ordine di esecuzione è il seguente:

  1. I valori nell'oggetto DataRow vengono spostati nei valori dei parametri.

  2. Viene generato l'evento OnRowUpdating.

  3. Il comando viene eseguito.

  4. Se il comando è impostato su FirstReturnedRecord, il primo risultato restituito viene inserito nell'oggetto DataRow.

  5. Se sono presenti parametri di output, vengono inseriti in DataRow.

  6. Viene generato l'evento OnRowUpdated.

  7. Viene chiamato DataRow.AcceptChanges. Verrà generato sia gli DataTable.RowChanging eventi che DataTable.RowChanged gli eventi per l'oggetto aggiornato DataRow.

Ogni comando associato all'oggetto DataAdapter ha in genere una raccolta di parametri associata. I parametri vengono mappati alla riga corrente tramite le SourceColumn proprietà e SourceVersion della classe del Parameter provider di dati .NET. SourceColumn fa riferimento a una DataTable colonna a cui fa DataAdapter riferimento per ottenere i valori dei parametri per la riga corrente.

SourceColumn fa riferimento al nome di colonna non mappato prima che siano stati applicati mapping di tabelle. Se SourceColumn si riferisce a una colonna inesistente, l'azione eseguita dipende da uno dei valori seguenti MissingMappingAction .

Valore di enumerazione Azione intrapresa
MissingMappingAction.Passthrough Usare i nomi di colonna di origine e i nomi di tabella nel DataSet caso in cui non sia presente alcun mapping.
MissingMappingAction.Ignore Viene generato un oggetto SystemException . Quando i mapping vengono impostati in modo esplicito, un mapping mancante per un parametro di input è in genere il risultato di un errore.
MissingMappingAction.Error Viene generato un oggetto SystemException .

La SourceColumn proprietà viene usata anche per eseguire il mapping del valore per i parametri di output o di input/output all'oggetto DataSet. Un'eccezione viene generata se fa riferimento a una colonna inesistente.

La SourceVersion proprietà di una classe di dati Parameter .NET determina se usare la versione Originale, Current o Proposta del valore di colonna. Questa funzionalità viene spesso usata per includere valori originali nella clausola WHERE di un'istruzione UPDATE per verificare le violazioni di concorrenza ottimistiche.

La chiamata al metodo o AcceptChanges al metodo eseguirà il AcceptChanges commit di tutte le modifiche nell'oggetto DataSet o DataTable. Se uno di questi metodi viene chiamato prima che venga chiamato il metodo, non verrà eseguito il commit di modifiche quando viene chiamato il UpdateUpdate metodo, a meno che non siano state apportate ulteriori modifiche dopo AcceptChanges o AcceptChanges chiamate.

Nota

Se si verifica un errore durante l'aggiornamento di una riga, viene generata un'eccezione e l'esecuzione dell'aggiornamento viene interrotta. Per continuare l'operazione di aggiornamento senza generare eccezioni quando viene rilevato un errore, impostare la ContinueUpdateOnError proprietà su prima true di chiamare Update. È anche possibile rispondere agli errori in base a riga all'interno dell'evento RowUpdated di un DataAdapter. Per continuare l'operazione di aggiornamento senza generare un'eccezione all'interno dell'evento RowUpdated , impostare la Status proprietà dell'oggetto RowUpdatedEventArgs su Continue.

Per ogni colonna propagata all'origine dati in Update, è necessario aggiungere un parametro a InsertCommand, UpdateCommando DeleteCommand. La SourceColumn proprietà del parametro deve essere impostata sul nome della colonna. Questa impostazione indica che il valore del parametro non è impostato manualmente, ma viene preso dalla colonna specifica nella riga attualmente elaborata.

Si applica a

Vedi anche