Esecuzione di transazioni in ODBC
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Importante
SQL Server Native Client (SNAC) non viene fornito con:
- SQL Server 2022 (16.x) e versioni successive
- SQL Server Management Studio 19 e versioni successive
SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider OLE DB Microsoft legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni.
Per i nuovi progetti, usare uno dei driver seguenti:
Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni dal 2012 al 2019), vedere questa Eccezione relativa al ciclo di vita del supporto.
Le transazioni in ODBC vengono gestite a livello di connessione. Quando un'applicazione completa una transazione, esegue il commit o il rollback di tutte le operazioni effettuate tramite tutti gli handle di istruzione nella connessione. Per eseguire il commit o il rollback di una transazione, le applicazioni devono chiamare SQLEndTran anziché inviare un'istruzione COMMIT o ROLLBACK.
Un'applicazione chiama SQLSetConnectAttr per passare tra le due modalità ODBC di gestione delle transazioni:
Modalità autocommit
Di ogni istruzione completata correttamente viene automaticamente eseguito il commit. Quando si utilizza la modalità autocommit, non sono necessarie altre funzioni di gestione delle transazioni.
Modalità di commit manuale
Tutte le istruzioni eseguite vengono incluse nella stessa transazione fino a quando non viene arrestata specificamente chiamando SQLEndTran.
La modalità autocommit è la modalità di esecuzione delle transazioni predefinita per ODBC. Quando viene stabilita una connessione, è in modalità autocommit finché SQLSetConnectAttr non viene chiamato per passare alla modalità di commit manuale impostando la modalità autocommit disattivata. Quando un'applicazione disattiva l'autocommit, l'istruzione successiva inviata al database avvia una transazione. La transazione rimane quindi attiva fino a quando l'applicazione non chiama SQLEndTran con le opzioni SQL_COMMIT o SQL_ROLLBACK. Il comando inviato al database dopo che SQLEndTran avvia la transazione successiva.
Se un'applicazione passa dalla modalità di commit manuale alla modalità autocommit, il driver esegue il commit di tutte le transazioni attualmente aperte nella connessione.
Le applicazioni ODBC non devono utilizzare istruzioni per transazioni Transact-SQL quali BEGIN TRANSACTION, COMMIT TRANSACTION o ROLLBACK TRANSACTION, in quanto tali istruzioni possono provocare un comportamento imprevedibile nel driver. Un'applicazione ODBC deve essere eseguita in modalità autocommit e non utilizzare funzioni o istruzioni di gestione delle transazioni oppure eseguire in modalità di commit manuale e usare la funzione ODBC SQLEndTran per eseguire il commit o il rollback delle transazioni.