Supporto delle transazioni

Il grado di supporto per le transazioni è definito dal driver. ODBC è progettato per essere implementato in un database a utente singolo o desktop che non deve gestire più aggiornamenti ai dati. Inoltre, alcuni database che supportano le transazioni lo fanno solo per le istruzioni DML (Data Manipulation Language) di SQL; esistono restrizioni o semantiche di transazioni speciali relative all'uso del linguaggio DDL (Data Definition Language) quando una transazione è attiva. Ciò significa che può essere disponibile il supporto delle transazioni per più aggiornamenti simultanei alle tabelle, ma non per la modifica del numero e della definizione delle tabelle durante una transazione.

Un'applicazione determina se le transazioni sono supportate, se DDL può essere inclusa in una transazione ed eventuali effetti speciali dell'inclusione di DDL in una transazione, chiamando SQLGetInfo con l'opzione SQL_TXN_CAPABLE. Per altre informazioni, vedere la descrizione della funzione SQLGetInfo.

Se il driver non supporta le transazioni, ma l'applicazione ha la possibilità (usando un'API diversa da ODBC) di bloccare e sbloccare i dati, le applicazioni possono ottenere il supporto delle transazioni bloccando e sbloccando record e tabelle in base alle esigenze. Per implementare l'esempio del trasferimento sui conti, l'applicazione blocca i record per entrambi i conti, copia i valori correnti, esegue l’addebito sul primo conto, esegue l’accredito sul secondo conto e sblocca i record. Se uno dei passaggi non va a buon fine, l'applicazione ripristina i conti servendosi delle copie.

Anche le origini dati che supportano le transazioni potrebbero non essere in grado di supportare più transazioni alla volta in un determinato ambiente. Le applicazioni chiamano SQLGetInfo con l'opzione SQL_MULTIPLE_ACTIVE_TXN per determinare se un'origine dati può supportare transazioni attive simultanee in più connessioni nello stesso ambiente. Poiché è presente una transazione per connessione, questa operazione è interessante solo per le applicazioni con più connessioni alla stessa origine dati.