Elaborazione di transazioni
Una transazione delimita l'inizio e la fine di una serie di operazioni di accesso ai dati eseguite in una connessione. Soggetto alle funzionalità transazionali dell'origine dati, l'oggetto Connection consente anche di creare e gestire le transazioni. Ad esempio, usando il provider Microsoft OLE DB per SQL Server per accedere a un database in Microsoft SQL Server, è possibile creare più transazioni annidate per i comandi eseguiti.
ADO garantisce che le modifiche a un'origine dati derivanti dalle operazioni di una transazione vengano eseguite correttamente insieme o non vengano eseguite affatto.
Se si annulla la transazione o se una delle relative operazioni ha esito negativo, il risultato sarà come se nessuna delle operazioni della transazione fosse stata eseguita. L'origine dati rimarrà come era prima dell'inizio della transazione.
ADO fornisce i metodi seguenti per controllare le transazioni: BeginTrans, CommitTrans e RollbackTrans. Utilizzare questi metodi con un oggetto Connection quando si desidera salvare o annullare una serie di modifiche apportate ai dati di origine come singola unità. Ad esempio, per trasferire denaro tra conti, si sottrae un importo da uno e si aggiunge lo stesso importo all'altro. Se uno dei due aggiornamenti ha esito negativo, i conti non corrispondono più. L'esecuzione di queste modifiche all'interno di una transazione aperta garantisce che tutte o nessuna delle modifiche vengano apportate.
Nota
Non tutti i provider di database supportano le transazioni. Verificare che la proprietà definita dal provider "Transaction DDL" venga visualizzata nella raccolta Properties dell'oggetto Connection, a indicare che il provider supporta le transazioni. Se il provider non supporta le transazioni, la chiamata a uno di questi metodi restituirà un errore.
Dopo aver chiamato il metodo BeginTrans, il provider non eseguirà più il commit istantaneo delle modifiche apportate finché non viene chiamato CommitTrans o RollbackTrans per terminare la transazione.
La chiamata al metodo CommitTrans salva le modifiche apportate all'interno di una transazione aperta nella connessione e termina la transazione. La chiamata al metodo RollbackTrans inverte tutte le modifiche apportate all'interno di una transazione aperta e termina la transazione. La chiamata a uno dei due metodi quando non è presente alcuna transazione aperta genera un errore.
A seconda della proprietà Attributes dell'oggetto Connection, la chiamata ai metodi CommitTrans o RollbackTrans può avviare automaticamente una nuova transazione. Se la proprietà Attributes è impostata su adXactCommitRetaining, il provider avvia automaticamente una nuova transazione dopo una chiamata CommitTrans. Se la proprietà Attributes è impostata su adXactAbortRetaining, il provider avvia automaticamente una nuova transazione dopo una chiamata a RollbackTrans.
Livello di isolamento della transazione
Usare la proprietà IsolationLevel per impostare il livello di isolamento di una transazione di un oggetto Connection. L'impostazione non diventa effettiva fino alla successiva chiamata al metodo BeginTrans. Se il livello di isolamento richiesto non è disponibile, il provider potrebbe restituire il livello di isolamento superiore successivo. Per altri dettagli sui valori validi, vedere la proprietà IsolationLevel nella guida di riferimento per programmatori ADO.
Transazioni annidate
Per i provider che supportano le transazioni annidate, la chiamata al metodo BeginTrans all'interno di una transazione aperta avvia una nuova transazione annidata. Il valore restituito indica il livello di annidamento: il valore restituito "1" indica che è stata aperta una transazione di primo livello (ovvero la transazione non è annidata all'interno di un'altra transazione), "2" indica che è stata aperta una transazione di secondo livello (una transazione annidata all'interno di una transazione di primo livello) e così via. La chiamata a CommitTrans o RollbackTrans influisce solo sulla transazione aperta più di recente; è necessario chiudere o eseguire il rollback della transazione corrente prima di poter risolvere eventuali transazioni di livello superiore.