Supporto delle transazioni in OLE DB
Una transazione è un modo per raggruppare o raggruppare in batch una serie di aggiornamenti a un'origine dati in modo che tutti abbiano esito positivo e venga eseguito il commit in una sola volta o (se uno di essi ha esito negativo) non viene eseguito il commit e viene eseguito il rollback dell'intera transazione. Questo processo garantisce l'integrità del risultato nell'origine dati.
OLE DB supporta le transazioni con i tre metodi seguenti:
Relazione tra sessioni e transazioni
Un singolo oggetto origine dati può creare uno o più oggetti sessione, ognuno dei quali può trovarsi all'interno o all'esterno dell'ambito di una transazione in un determinato momento.
Quando una sessione non immette una transazione, tutte le operazioni eseguite all'interno di tale sessione nell'archivio dati vengono immediatamente sottoposte a commit in ogni chiamata al metodo. Questa modalità viene talvolta definita modalità autocommit o modalità implicita.
Quando una sessione entra in una transazione, tutte le operazioni eseguite all'interno di tale sessione nell'archivio dati fanno parte di tale transazione e viene eseguito il commit o l'interruzione come singola unità. Questa operazione viene talvolta definita modalità di commit manuale.
Il supporto delle transazioni è specifico del provider. Se il provider in uso supporta le transazioni, un oggetto sessione che supporta ITransaction
e ITransactionLocal
può immettere una transazione (non annidata). La classe CSession dei modelli OLE DB supporta queste interfacce ed è il modo consigliato per implementare il supporto delle transazioni in Visual C++.
Avvio e fine della transazione
I metodi , Commit
e Abort
vengono chiamati StartTransaction
nell'oggetto set di righe nel consumer.
La chiamata ITransactionLocal::StartTransaction
avvia una nuova transazione locale. Quando si avvia la transazione, le modifiche richieste dalle operazioni successive non vengono applicate all'archivio dati fino a quando non si esegue il commit della transazione.
Chiamare ITransaction::Commit
o ITransaction::Abort
terminare la transazione. Commit
fa sì che tutte le modifiche all'interno dell'ambito della transazione vengano applicate all'archivio dati. Abort
determina l'annullamento di tutte le modifiche all'interno dell'ambito della transazione e l'archivio dati viene lasciato nello stato precedente all'avvio della transazione.
Transazioni annidate
Una transazione nidificata si verifica quando si avvia una nuova transazione locale quando esiste già una transazione attiva nella sessione. La nuova transazione viene avviata come transazione nidificata sotto la transazione corrente. Se il provider non supporta le transazioni nidificate, la chiamata StartTransaction
quando è già presente una transazione attiva nella sessione restituisce XACT_E_XTIONEXISTS.
Transazioni distribuite
Una transazione distribuita è una transazione che aggiorna i dati distribuiti; ovvero dati su più di un sistema di computer in rete. Se si desidera supportare le transazioni in un sistema distribuito, è consigliabile usare .NET Framework anziché il supporto delle transazioni OLE DB.