Partage via


Liaison des colonnes d’un ensemble de résultats

Les applications peuvent lier autant ou aussi peu de colonnes du jeu de résultats qu'elles le souhaitent, y compris ne lier aucune colonne du tout. Lorsqu’une ligne de données est extraite, le pilote retourne les données des colonnes liées à l’application. Si l’application lie toutes les colonnes du jeu de résultats dépend de l’application. Par exemple, les applications qui génèrent des rapports ont généralement un format fixe ; ces applications créent un jeu de résultats contenant toutes les colonnes utilisées dans le rapport, puis lient et récupèrent les données pour toutes ces colonnes. Les applications qui affichent des écrans pleins de données permettent parfois à l’utilisateur de décider quelles colonnes afficher ; ces applications créent un jeu de résultats contenant toutes les colonnes que l’utilisateur peut souhaiter, mais lier et récupérer les données uniquement pour ces colonnes choisies par l’utilisateur.

Les données peuvent être récupérées à partir de colonnes indépendantes en appelant SQLGetData. Il s’agit généralement de récupérer des données longues, qui dépassent souvent la longueur d’une mémoire tampon unique et doivent être récupérées en parties.

Les colonnes peuvent être liées à tout moment, même après la lecture des lignes. Toutefois, les nouvelles liaisons ne prennent effet qu’à la prochaine extraction d’une ligne ; ils ne sont pas appliqués aux données des lignes déjà extraites.

Une variable reste liée à une colonne jusqu’à ce qu’une variable différente soit liée à la colonne, jusqu’à ce que la colonne soit liée en appelant SQLBindCol avec un pointeur Null comme adresse de la variable, jusqu’à ce que toutes les colonnes soient liées en appelant SQLFreeStmt avec l’option SQL_UNBIND, ou jusqu’à ce que l’instruction soit publiée. Pour cette raison, l’application doit être sûr que toutes les variables liées restent valides tant qu’elles sont liées. Pour plus d’informations, consultez Allocation et libération des mémoires tampons.

Étant donné que les liaisons de colonnes sont uniquement des informations associées à la structure d’instructions, elles peuvent être définies dans n’importe quel ordre. Elles sont également indépendantes de l'ensemble de résultats. Par exemple, supposons qu’une application lie les colonnes du jeu de résultats généré par l’instruction SQL suivante :

SELECT * FROM Orders  

Si l’application exécute ensuite l’instruction SQL

SELECT * FROM Lines  

Sur le même descripteur d'instruction, les liaisons de colonnes pour le premier jeu de résultats sont toujours actives, car ce sont les liaisons stockées dans la structure de requête. Dans la plupart des cas, il s’agit d’une mauvaise pratique de programmation et devrait être évitée. Au lieu de cela, l’application doit appeler SQLFreeStmt avec l’option SQL_UNBIND pour dissocier toutes les anciennes colonnes, puis lier de nouvelles colonnes.