Condividi tramite


Elaborazione delle transazioni

Una transazione delimita l'inizio e la fine di una serie di operazioni di accesso ai dati eseguite in una connessione. In base alle funzionalità transazionali dell'origine dati, l'oggetto connection consente anche di creare e gestire 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 apportate a un'origine dati risultante dalle operazioni in una transazione vengano eseguite con successo insieme o non avvengano affatto.

Se si annulla la transazione o se una delle relative operazioni ha esito negativo, il risultato sarà come se nessuna delle operazioni nella transazione fosse stata eseguita. L'origine dati rimarrà invariata prima dell'inizio della transazione.

ADO fornisce i metodi seguenti per controllare le transazioni: BeginTrans, CommitTranse 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 degli aggiornamenti ha esito negativo, i conti non vengono più bilanciati. 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 supportano le transazioni. Verificare che la proprietà definita dal provider "Transaction DDL" appaia nella raccolta Properties dell'oggetto Connection, indicando 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 si chiama 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 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 degli attributi Attributes della proprietà dell'oggetto Connection, la chiamata al metodo 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, dopo una chiamata a RollbackTrans, il provider avvia automaticamente una nuova transazione.

Livello di isolamento delle transazioni

Utilizzare la proprietà IsolationLevel per impostare il livello di isolamento di una transazione su un oggetto Connection. L'impostazione non viene applicata fino alla successiva chiamata al metodo BeginTrans. Se il livello di isolamento richiesto non è disponibile, il provider potrebbe restituire il livello di isolamento successivo. Per altre informazioni sui valori validi, vedere la proprietà IsolationLevel nella guida di riferimento per programmatori ADO.

Transazioni annidate

Per i provider che supportano le transazioni nidificate, la chiamata al metodo BeginTrans all'interno di una transazione aperta avvia una nuova transazione annidata. Il valore restituito indica il livello di annidamento: un 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 committrans o rollbackTrans influisce solo sulla transazione aperta più di recente; prima di poter risolvere eventuali transazioni di livello superiore, è necessario chiudere o eseguire il rollback della transazione corrente.