Handles d’instruction
Une instruction est plus facilement considérée comme une instruction SQL, telle que SELECT * FROM Employee. Toutefois, une instruction est plus qu’une instruction SQL : elle se compose de toutes les informations associées à cette instruction SQL, telles que les jeux de résultats créés par l’instruction et les paramètres utilisés dans l’exécution de l’instruction. Une instruction n’a même pas besoin d’avoir une instruction SQL définie par l’application. Par exemple, lorsqu’une fonction catalogue telle que SQLTables est exécutée sur une instruction, elle exécute une instruction SQL prédéfinie qui retourne une liste de noms de tables.
Chaque instruction est identifiée par un handle d’instruction. Une instruction est associée à une seule connexion et il peut y avoir plusieurs instructions sur cette connexion. Certains pilotes limitent le nombre d’instructions actives qu’ils prennent en charge ; l’option SQL_MAX_CONCURRENT_ACTIVITIES dans SQLGetInfo spécifie le nombre d’instructions actives prises en charge par un pilote sur une seule connexion. Une instruction est définie pour être active si elle a des résultats en attente, où les résultats sont soit un jeu de résultats, soit le nombre de lignes affectées par une instruction INSERT, UPDATE ou DELETE , ou les données sont envoyées avec plusieurs appels à SQLPutData.
Dans un élément de code qui implémente ODBC (gestionnaire de pilotes ou pilote), le handle d’instruction identifie une structure qui contient des informations d’instruction, telles que :
État de l’instruction
Diagnostics au niveau de l’instruction actuel
Adresses des variables d’application liées aux paramètres de l’instruction et aux colonnes du jeu de résultats
Paramètres actuels de chaque attribut d’instruction
Les handles d’instruction sont utilisés dans la plupart des fonctions ODBC. Notamment, ils sont utilisés dans les fonctions pour lier des paramètres et des colonnes de jeu de résultats (SQLBindParameter et SQLBindCol), préparer et exécuter des instructions (SQLPrepare, SQLExecute et SQLExecDirect), récupérer des métadonnées (SQLColAttribute et SQLDescribeCol), extraire des résultats (SQLFetch) et récupérer des diagnostics (SQLGetDiagField et SQLGetDiagRec). Ils sont également utilisés dans les fonctions de catalogue (SQLColumns, SQLTables, et ainsi de suite) et un certain nombre d’autres fonctions.
Les handles d’instruction sont alloués avec SQLAllocHandle et libérés avec SQLFreeHandle.