Condividi tramite


Transazione (ODBC)

Le informazioni contenute in questo argomento sono valide per le classi ODBC MFC.

Una transazione è un modo per raggruppare o raggruppare in batch una serie di aggiornamenti a un'origine dati in modo che venga eseguito il commit di tutti contemporaneamente o nessuno se si esegue il rollback della transazione. Se non si usa una transazione, viene eseguito automaticamente il commit delle modifiche apportate all'origine dati anziché il commit su richiesta.

Nota

Non tutti i driver di database ODBC supportano le transazioni. Chiamare la funzione membro dell'oggetto CanTransactCDatabase o CRecordset per determinare se il driver supporta le transazioni per un determinato database. Si noti che CanTransact non indica se l'origine dati fornisce supporto completo per le transazioni. È inoltre necessario chiamare CDatabase::GetCursorCommitBehavior e CDatabase::GetCursorRollbackBehavior dopo CommitTrans e Rollback per controllare l'effetto della transazione sull'oggetto aperto CRecordset .

Le chiamate alle AddNew funzioni membro e Edit di un CRecordset oggetto influiscono immediatamente sull'origine dati quando si chiama Update. Delete anche le chiamate diventano effettive immediatamente. Al contrario, è possibile usare una transazione costituita da più chiamate a AddNew, Edit, Updatee Delete, che vengono eseguite ma non sottoposte a commit fino a quando non si chiama CommitTrans in modo esplicito. Stabilendo una transazione, è possibile eseguire una serie di chiamate di questo tipo mantenendo al tempo stesso la possibilità di eseguirne il rollback. Se una risorsa critica non è disponibile o un'altra condizione impedisce il completamento dell'intera transazione, è possibile eseguire il rollback della transazione anziché eseguirne il commit. In tal caso, nessuna delle modifiche appartenenti alla transazione influisce sull'origine dati.

Nota

Attualmente, la classe CRecordset non supporta gli aggiornamenti all'origine dati se è stato implementato il recupero delle righe bulk. Ciò significa che non è possibile effettuare chiamate a AddNew, EditDelete, o Update. Tuttavia, è possibile scrivere funzioni personalizzate per eseguire gli aggiornamenti e quindi chiamare tali funzioni all'interno di una determinata transazione. Per altre informazioni sul recupero delle righe bulk, vedere Recordset: recupero di record in blocco (ODBC).

Nota

Oltre a influire sul recordset, le transazioni influiscono sulle istruzioni SQL eseguite direttamente, purché si usi ODBC HDBC associato all'oggetto CDatabase o a un HSTMT ODBC basato su tale HDBC.

Le transazioni sono particolarmente utili quando si dispone di più record che devono essere aggiornati contemporaneamente. In questo caso, si vuole evitare una transazione di metà completamento, ad esempio se è stata generata un'eccezione prima dell'ultimo aggiornamento. Il raggruppamento di tali aggiornamenti in una transazione consente un ripristino (rollback) dalle modifiche e restituisce i record allo stato di pretrasmissione. Ad esempio, se una banca trasferisce denaro dal conto A al conto B, sia il prelievo da A che il deposito a B deve riuscire a elaborare correttamente i fondi o l'intera transazione deve avere esito negativo.

Nelle classi di database si eseguono transazioni tramite CDatabase oggetti . Un CDatabase oggetto rappresenta una connessione a un'origine dati e uno o più recordset associati a tale CDatabase oggetto operano su tabelle del database tramite funzioni membro recordset.

Nota

È supportato un solo livello di transazioni. Non è possibile annidare le transazioni né una transazione si estende su più oggetti di database.

Negli argomenti seguenti vengono fornite altre informazioni sul modo in cui vengono eseguite le transazioni:

Vedi anche

Open Database Connectivity (ODBC)