Partager 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 à l’état C6 sans instructions allouées sur la connexion. Par exemple, supposons que la connexion soit en mode de validation manuelle et qu’elle soit à l’état C4. Si une instruction est allouée, exécutée (au démarrage d’une transaction), puis libérée, la transaction reste active, mais il n’y a aucune instruction sur la connexion.

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

SQLAllocHandle

C0

Pas d’env.
C1 Non alloué C2

Allocated
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 montre les transitions lorsque HandleType a été SQL_HANDLE_ENV.

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

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

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

[5] L’appel de SQLAllocHandle avec OutputHandlePtr pointant vers un handle valide remplace ce handle sans tenir compte du contenu précédent de ce handle, ce qui peut entraîner des problèmes pour les pilotes ODBC. La programmation d’application ODBC est incorrecte 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 le réallouer. Le remplacement des handles ODBC d’une telle manière peut entraîner un comportement incohérent ou des erreurs de la part des pilotes ODBC.

SQLBrowseConnect

C0

Pas d’env.
C1

Non alloué
C2

Allocated
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

Allocated
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

Allocated
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

Allocated
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

Allocated
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 explicitement alloués.

SQLDataSources et SQLDrivers

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Besoin de données
C4

Connecté
C5

.
C6

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

SQLDisconnect

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
C4

Connecté
C5

.
C6

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

SQLDriverConnect

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
C4

Connecté
C5

.
C6

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

SQLEndTran

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
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 montre les transitions lorsque HandleType a été SQL_HANDLE_ENV.

[2] Cette ligne montre 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] La validation ou la restauration a réussi sur la connexion. La fonction retourne SQL_ERROR si la validation ou la restauration a échoué sur une autre connexion, ou 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 ce qui s’applique (selon que CompletionType a été 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

Allocated
C3

Données nécessaires
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écificationde curseur (telle qu’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écificationde curseur (telle qu’une instruction SELECT).

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

SQLFreeHandle

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
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 montre les transitions lorsque HandleType a été SQL_HANDLE_ENV.

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

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

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

[5] Une seule instruction a été 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

Allocated
C3

Données nécessaires
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 en mode validation automatique et un curseur était ouvert sur au moins une autre instruction.

SQLGetConnectAttr

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
C4

Connecté
C5

.
C6

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

[1] L’argument Attribute a été 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 a été définie pour l’attribut de connexion.

[2] L’argument Attribute 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 aucune valeur n’avait été définie pour l’attribut de connexion.

SQLGetDiagField et SQLGetDiagRec

C0

Pas d’env.
C1

Non alloué
C2

Allocated
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 montre les transitions lorsque HandleType a été SQL_HANDLE_ENV.

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

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

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

SQLGetEnvAttr

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Besoin de données
C4

Connecté
C5

.
C6

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

SQLGetFunctions

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Besoin de données
C4

Connecté
C5

.
C6

Transaction
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Besoin de données
C4

Connecté
C5

.
C6

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

[1] L’argument InfoType a été SQL_ODBC_VER.

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

SQLMoreResults

C0

Pas d’env.
C1

Non alloué
C2

Allocated
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

Allocated
C3

Données nécessaires
C4

Connecté
C5

.
C6

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

SQLPrepare

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
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

Allocated
C3

Données nécessaires
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 Attribute n’a pas été SQL_ATTR_TRANSLATE_LIB ou SQL_ATTR_TRANSLATE_OPTION.

[2] L’argument Attribute a été SQL_ATTR_TRANSLATE_LIB ou SQL_ATTR_TRANSLATE_OPTION.

[3] L’argument Attribute n’a pas été SQL_ATTR_ODBC_CURSORS ou SQL_ATTR_PACKET_SIZE.

[4] L’argument Attribute a été SQL_ATTR_ODBC_CURSORS.

[5] L’argument Attribute a été SQL_ATTR_PACKET_SIZE.

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

[7] L’argument Attribute a été SQL_ATTR_TXN_ISOLATION.

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

SQLSetEnvAttr

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Données nécessaires
C4

Connecté
C5

.
C6

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

Toutes les autres fonctions ODBC

C0

Pas d’env.
C1

Non alloué
C2

Allocated
C3

Besoin de données
C4

Connecté
C5

.
C6

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