Partage via


Transitions de connexion

Les connexions ODBC ont les états suivants.

State Description
C0 Environnement non alloué, connexion non allouée
C1 Environnement alloué, connexion non allouée
C2 Environnement alloué, connexion allouée
C3 La fonction de connexion a besoin de données
C4 Connexion connectée
C5 Connexion connectée, instruction allouée
C6 Connexion connectée, transaction en cours. Il est possible qu’une connexion soit dans l’état C6 sans instructions allouées sur la connexion. Par exemple, supposons que la connexion est en mode de validation manuelle et qu’elle est dans l’état C4. Si une instruction est allouée, exécutée (démarrage d’une transaction), puis libérée, la transaction reste active, mais il n’y a pas d’instructions sur la connexion.

Les tableaux suivants montrent comment chaque fonction ODBC affecte l’état de connexion.

SQLAllocHandle

C0

Pas d’env.
C1 non alloué C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
C1[1] --[5] --[5] --[5] --[5] --[5] --[5]
(IH) [2] C2 --[5] --[5] --[5] --[5] --[5]
(IH) [3] (IH) (08003) (08003) C5 --[5] --[5]
(IH) [4] (IH) (08003) (08003) --[5] --[5] --[5]

[1] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_ENV.

[2] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DBC.

[3] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_STMT.

[4] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DESC.

[5] Appel de SQLAllocHandle avec OutputHandlePtr pointant vers un handle valide remplace ce handle sans tenir compte du contenu précédent du handle, et peut entraîner des problèmes pour les pilotes ODBC. Il est incorrect de programmer une application ODBC pour appeler SQLAllocHandle deux fois avec la même variable d’application définie pour *OutputHandlePtr sans appeler SQLFreeHandle pour libérer le handle avant de la réallouer. Le remplacement des handles ODBC d’une telle manière peut entraîner des erreurs ou comportements incohérents dans la partie des pilotes ODBC.

SQLBrowseConnect

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) (IH) -- --[1] C5[2]

[1] La connexion était en mode de validation manuelle.

[2] La connexion était en mode de validation automatique.

SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedures, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges et SQLTables

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] La connexion était en mode de validation automatique, ou la source de données n’a pas commencé une transaction.

[2] La connexion était en mode de validation manuelle et la source de données a commencé une transaction.

SQLConnect

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField et SQLSetDescRec

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) --[1] -- --

[1] Dans cet état, les seuls descripteurs disponibles pour l’application sont des descripteurs alloués explicitement.

SQLDataSources et SQLDrivers

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) [1] --[3] --[3] --[3] -- -- --[4] ou ([5], [6], et [8]) C4[5] et [7] C5[5], [6] et [9]
(IH) [2] (IH) (08003) (08003) -- -- C5

[1] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_ENV.

[2] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DBC.

[3] Étant donné que la connexion n’est pas dans un état connecté, elle n’est pas affectée par la transaction.

[4] Échec de la validation ou de la restauration sur la connexion. La fonction retourne SQL_ERROR dans ce cas.

[5] Validation ou restauration réussie sur la connexion. La fonction retourne SQL_ERROR si la validation ou la restauration a échoué sur une autre connexion, ou si la fonction retourne SQL_SUCCESS si la validation ou la restauration a réussi sur toutes les connexions.

[6] Au moins une instruction a été allouée sur la connexion.

[7] Aucune instruction n’a été allouée sur la connexion.

[8] La connexion avait au moins une instruction pour laquelle il y avait un curseur ouvert, et la source de données conserve les curseurs lorsque les transactions sont validées ou restaurées, selon que CompletionType était SQL_COMMIT ou SQL_ROLLBACK). Pour plus d’informations, consultez les attributs SQL_CURSOR_COMMIT_BEHAVIOR et SQL_CURSOR_ROLLBACK_BEHAVIOR dans SQLGetInfo.

[9] Si la connexion avait des instructions pour lesquelles il y avait des curseurs ouverts, les curseurs n’ont pas été conservés lorsque la transaction a été validée ou restaurée.

SQLExecDirect et SQLExecute

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] La connexion était en mode de validation automatique et l’instruction exécutée n’était pas une spécification de curseur (par exemple, une instruction SELECT) ; ou la connexion était en mode de validation manuelle et l’instruction exécutée n’a pas commencé une transaction.

[2] La connexion était en mode de validation automatique et l’instruction exécutée était une spécification de curseur (par exemple, une instruction SELECT).

[3] La connexion était en mode de validation manuelle et la source de données a commencé une transaction.

SQLFreeHandle

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) [1] C0 (HY010) (HY010) (HY010) (HY010) (HY010)
(IH) [2] (IH) (C1) (HY010) (HY010) (HY010) (HY010)
(IH) [3] (IH) (IH) (IH) (IH) C4[5] --[6] --[7] C4[5] et [8] C5[6] et [8]
(IH) [4] (IH) (IH) (IH) -- -- --

[1] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_ENV.

[2] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DBC.

[3] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_STMT.

[4] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DESC.

[5] Il n’y avait qu’une seule instruction allouée sur la connexion.

[6] Plusieurs instructions ont été allouées sur la connexion.

[7] La connexion était en mode de validation manuelle.

[8] La connexion était en mode de validation automatique.

SQLFreeStmt

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) [1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH) [2] (IH) (IH) (IH) (IH) -- --

[1] Cette ligne affiche les transactions lorsque l’argument Option est SQL_CLOSE.

[2] Cette ligne affiche les transactions lorsque l’argument Option est SQL_UNBIND ou SQL_RESET_PARAMS.

[3] La connexion était en mode de validation automatique et aucun curseur n’était ouvert sur les instructions à l’exception de celle-ci.

[4] La connexion était en mode de validation manuelle, ou elle était en mode de validation automatique et un curseur était ouvert sur au moins une autre instruction.

SQLGetConnectAttr

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
IH IH --[1] 08003[2] HY010 -- -- --

[1] L’argument Attribut était SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE ou SQL_ATTR_TRACEFILE, ou une valeur avait été définie pour l’attribut de connexion.

[2] L’argument Attribut n’était pas SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE ou SQL_ATTR_TRACEFILE, et une valeur n’avait pas été définie pour l’attribut de connexion.

SQLGetDiagField et SQLGetDiagRec

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) [1] -- -- -- -- -- --
(IH) [2] (IH) -- -- -- -- --
(IH) [3] (IH) (IH) (IH) (IH) -- --
(IH) [4] (IH) (IH) (IH) -- -- --

[1] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_ENV.

[2] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DBC.

[3] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_STMT.

[4] Cette ligne affiche les transitions lorsque HandleType a été SQL_HANDLE_DESC.

SQLGetEnvAttr

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
IH -- -- -- -- -- --

SQLGetFunctions

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
IH IH --[1] 08003[2] 08003 -- -- --

[1] L’argument InfoType était SQL_ODBC_VER.

[2] L’argument InfoType n’était pas SQL_ODBC_VER.

SQLMoreResults

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] La connexion était en mode de validation automatique et l’appel à SQLMoreResults n’a pas initialisé le traitement d’un jeu de résultats d’une spécification de curseur.

[2] La connexion était en mode de validation automatique et l’appel à SQLMoreResults a initialisé le traitement d’un jeu de résultats d’une spécification de curseur.

[3] La connexion était en mode de validation manuelle.

SQLNativeSql

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] La connexion était en mode de validation automatique, ou la source de données n’a pas commencé une transaction.

[2] La connexion était en mode de validation manuelle et la source de données a commencé une transaction.

SQLSetConnectAttr

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] et [6] C5[8] 08002[4] HY011[5] ou [7]

[1] L’argument Attribut n’a pas été SQL_ATTR_TRANSLATE_LIB ni SQL_ATTR_TRANSLATE_OPTION.

[2] L’argument Attribut était SQL_ATTR_TRANSLATE_LIB ou SQL_ATTR_TRANSLATE_OPTION.

[3] L’argument Attribut n’a pas été SQL_ATTR_ODBC_CURSORS ni SQL_ATTR_PACKET_SIZE.

[4] L’argument Attribut était SQL_ATTR_ODBC_CURSORS.

[5] L’argument Attribut était SQL_ATTR_PACKET_SIZE.

[6] L’argument Attribut n’était pas SQL_ATTR_AUTOCOMMIT, ou l’argument Attribut était SQL_ATTR_AUTOCOMMIT et la définition de cet attribut n’a pas validée la transaction.

[7] L’argument Attribut était SQL_ATTR_TXN_ISOLATION.

[8] L’argument Attribut a été SQL_ATTR_AUTOCOMMIT et la définition de cet attribut a validé la transaction.

SQLSetEnvAttr

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) -- -- (HY010) -- -- --

Toutes les autres fonctions ODBC

C0

Pas d’env.
C1

Non alloué
C2

Affecté
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
(IH) (IH) (IH) (IH) (IH) -- --