Partager via


Prise en charge des transactions

Le degré de prise en charge des transactions est défini par le pilote. ODBC est conçu pour être implémenté sur une base de données mono-utilisateur ou de bureau qui n’a pas besoin de gérer plusieurs mises à jour de ses données. De plus, certaines bases de données qui prennent en charge les transactions ne le font que pour les instructions DML (Data Manipulation Language) de SQL ; il existe des restrictions ou une sémantique de transaction spéciale concernant l’utilisation du langage de définition de données (DDL) lorsqu’une transaction est active. Autrement dit, il peut y avoir une prise en charge des transactions pour plusieurs mises à jour simultanées des tables, mais pas pour modifier le nombre et la définition des tables pendant une transaction.

Une application détermine si les transactions sont prises en charge, si DDL peut être incluse dans une transaction et les effets spéciaux d’inclusion de DDL dans une transaction, en appelant SQLGetInfo avec l’option SQL_TXN_CAPABLE. Pour plus d’informations, consultez la description de la fonction SQLGetInfo .

Si le pilote ne prend pas en charge les transactions, mais que l’application peut (à l’aide d’une API autre qu’ODBC) verrouiller et déverrouiller des données, les applications peuvent obtenir la prise en charge des transactions en verrouillant et déverrouillent les enregistrements et les tables selon les besoins. Pour implémenter l’exemple de transfert de compte, l’application verrouille les enregistrements des deux comptes, copie les valeurs actuelles, débite le premier compte, crédite le deuxième compte et déverrouille les enregistrements. Si des étapes ont échoué, l’application réinitialise les comptes à l’aide des copies.

Même les sources de données qui prennent en charge les transactions peuvent ne pas être en mesure de prendre en charge plusieurs transactions à la fois dans un environnement particulier. Les applications appellent SQLGetInfo avec l’option SQL_MULTIPLE_ACTIVE_TXN pour déterminer si une source de données peut prendre en charge des transactions actives simultanées sur plusieurs connexions dans le même environnement. Étant donné qu’il existe une transaction par connexion, cela n’est intéressant que pour les applications qui ont plusieurs connexions à la même source de données.