Un jeu de résultats a-t-il été créé ?

Dans la plupart des cas, les programmeurs d’applications savent si les instructions exécutées par leur application créent un jeu de résultats. C’est le cas si l’application utilise des instructions SQL codées en dur écrites par le programmeur. Il est généralement le cas lorsque l’application construit des instructions SQL au moment de l’exécution : le programmeur peut facilement inclure du code qui indique si une instruction SELECT ou une instruction INSERT est construite. Dans quelques situations, le programmeur ne peut pas savoir si une instruction crée un jeu de résultats. Cela est vrai si l’application permet à l’utilisateur d’entrer et d’exécuter une instruction SQL. Il est également vrai lorsque l’application construit une instruction au moment de l’exécution pour exécuter une procédure.

Dans ce cas, l’application appelle SQLNumResultCols pour déterminer le nombre de colonnes dans le jeu de résultats. S’il s’agit de 0, l’instruction n’a pas créé de jeu de résultats ; s’il s’agit d’un autre nombre, l’instruction a créé un jeu de résultats.

L’application peut appeler SQLNumResultCols à tout moment après la préparation ou l’exécution de l’instruction. Toutefois, étant donné que certaines sources de données ne peuvent pas facilement décrire les jeux de résultats qui seront créés par des instructions préparées, les performances souffrent si SQLNumResultCols est appelé après qu’une instruction soit préparée, mais avant son exécution.

Certaines sources de données prennent également en charge la détermination du nombre de lignes retournées par une instruction SQL dans un jeu de résultats. Pour ce faire, l’application appelle SQLRowCount. Exactement ce que représente le nombre de lignes est indiqué par le paramètre des SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 ou SQL_STATIC_CURSOR_ATTRIBUTES2 option (selon le type du curseur) retournée par un appel à SQLGetInfo. Ce masque de bits indique pour chaque type de curseur si le nombre de lignes retourné est exact, approximatif ou n’est pas disponible du tout. Si le nombre de lignes pour les curseurs statiques ou pilotés par les jeux de clés est affecté par les modifications apportées via SQLBulkOperations ou SQLSetPos, ou par des instructions de mise à jour ou de suppression positionnées, dépend d’autres bits retournés par les mêmes arguments d’option répertoriés précédemment. Pour plus d’informations, consultez la description de la fonction SQLGetInfo .