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 utilizzata 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 per 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 , 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 non sono state specificate istruzioni INSERT, UPDATE o DELETE, 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. Tutte le istruzioni SQL aggiuntive non 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 elencata nel primo mapping prima di eseguire un aggiornamento. Quindi Update aggiorna la riga utilizzando il valore della UpdatedRowSource proprietà . Tutte le righe aggiuntive restituite vengono ignorate.

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

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

  1. I valori in 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 in DataRow.

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

  6. Viene generato l'evento OnRowUpdated.

  7. Viene chiamato DataRow.AcceptChanges. Verranno generati sia gli DataTable.RowChanging eventi e DataTable.RowChanged per l'oggetto aggiornato DataRow.

A ogni comando associato a è DataAdapter in genere associata una raccolta di parametri. I parametri vengono mappati alla riga corrente tramite le SourceColumn proprietà e SourceVersion della classe di un provider di Parameter 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 della colonna non mappata prima dell'applicazione di eventuali mapping di tabella. Se SourceColumn fa riferimento a una colonna inesistente, l'azione eseguita dipende da uno dei valori seguenti MissingMappingAction .

Valore di enumerazione Azione intrapresa
MissingMappingAction.Passthrough Utilizzare i nomi delle colonne di origine e i nomi delle DataSet tabelle in se non è 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 input/output a DataSet. Viene generata un'eccezione se fa riferimento a una colonna inesistente.

La SourceVersion proprietà della classe di Parameter un provider di dati .NET determina se utilizzare la versione Originale, Corrente o Proposta del valore della colonna. Questa funzionalità viene spesso usata per includere i valori originali nella clausola WHERE di un'istruzione UPDATE per verificare la presenza di violazioni della concorrenza ottimistica.

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

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 si verifica un errore, impostare la ContinueUpdateOnError proprietà su true prima di chiamare Update. È anche possibile rispondere agli errori per riga all'interno dell'evento RowUpdated di un Oggetto DataAdapter. Per continuare l'operazione di aggiornamento senza generare un'eccezione all'interno dell'evento RowUpdated , impostare la Status proprietà di 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 ricavato dalla colonna specifica nella riga attualmente elaborata.

Si applica a

Vedi anche