Condividi tramite


Transazioni distribuite MS DTC

Nelle applicazioni scritte tramite OLE DB, Open Database Connectivity (ODBC), ActiveX Data Objects (ADO) o DB-Library è possibile utilizzare transazioni distribuite Transact-SQL eseguendo le istruzioni Transact-SQL per avviare e interrompere le transazioni distribuite Transact-SQL. OLE DB e ODBC includono inoltre il supporto per la gestione di transazioni distribuite a livello di API (Application Programming Interface). È possibile utilizzare le funzioni API nelle applicazioni OLE DB e ODBC per gestire transazioni distribuite che includono altri strumenti di gestione risorse Component Object Model (COM) che supportano transazioni Microsoft Distributed Transaction Coordinator (MS DTC) diverse da Motore di database di SQL Server. In tali applicazioni è inoltre possibile utilizzare le funzioni API per ottenere un maggiore controllo sul momento iniziale e finale di una transazione distribuita riguardante diversi computer che eseguono istanze di Motore di database.

Transazioni distribuite ODBC

Per controllare le transazioni locali a livello dell'API ODBC, è possibile impostare l'attributo di connessione SQL_ATTR_AUTOCOMMIT su SQL_AUTOCOMMIT_OFF e richiamare quindi la funzione ODBC SQLEndTran per l'esecuzione del commit o del rollback di ogni transazione. Evitare l'utilizzo di queste funzioni per gestire transazioni distribuite in un'applicazione ODBC. Per la gestione delle transazioni distribuite, è invece consigliabile utilizzare i metodi COM MS DTC:

  • Chiamare DtcGetTransactionManager per stabilire la connessione a MS DTC.

  • Chiamare ITransactionDispenser::BeginTransaction per avviare la transazione distribuita e ottenere un oggetto transazione.

  • Per ogni connessione ODBC inclusa nella transazione distribuita, chiamare la funzione ODBC SQLSetConnectAttr con l'opzione fOption impostata su SQL_COPT_SS_ENLIST_IN_DTC e l'opzione vParam impostata sull'indirizzo dell'oggetto transazione indicato in ITransactionDispenser::BeginTransaction.

  • Al termine della transazione, anziché chiamare la funzione ODBC SQLEndTran, chiamare il metodo ITransaction::Commit o ITransaction::Rollback sull'oggetto transazione ottenuto con ITransactionDispenser::BeginTransaction.

Transazioni distribuite OLE DB

Il modello di controllo delle transazioni distribuite in OLE DB è simile a quello seguito per le transazioni locali. Per controllare una transazione locale, un consumer OLE DB deve eseguire le operazioni seguenti:

  • Utilizzare il metodo ITransactionLocal::StartTransaction per avviare la transazione locale e ottenere un oggetto transazione.

  • Chiamare il metodo ITransaction::Commit o ITransaction::Rollback per l'oggetto transazione ottenuto tramite ITransactionLocal::StartTransaction.

Per controllare una transazione distribuita, il consumer deve eseguire le operazioni seguenti:

  • Chiamare DtcGetTransactionManager per stabilire la connessione a MS DTC.

  • Chiamare ITransactionDispenser::BeginTransaction per avviare la transazione distribuita e ottenere un oggetto transazione.

  • Chiamare l'interfaccia ITransactionJoin dell'oggetto transazione distribuita per ogni oggetto che partecipa a tale transazione.

  • Chiamare il metodo ITransaction::Commit o ITransaction::Rollback dell'oggetto transazione distribuita per completare la transazione.