DataAdapter.Update(DataSet) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
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 Insert
modello 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:
I valori in DataRow vengono spostati nei valori dei parametri.
Viene generato l'evento OnRowUpdating.
Il comando viene eseguito.
Se il comando è impostato su
FirstReturnedRecord
, il primo risultato restituito viene inserito in DataRow.Se sono presenti parametri di output, vengono inseriti in DataRow.
Viene generato l'evento OnRowUpdated.
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
, UpdateCommand
o 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.