Curseurs avant uniquement rapides (ODBC)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Lorsqu’il est connecté à une instance de SQL Server, le pilote ODBC SQL Server Native Client prend en charge les optimisations des performances pour les curseurs en lecture seule et en lecture seule. Les curseurs avant uniquement rapides sont implémentés en interne par le pilote et le serveur d'une manière très semblable aux jeux de résultats par défaut. Les curseurs avant uniquement rapides présentent d'autres caractéristiques, au-delà de leurs performances élevées :
SQLGetData n’est pas pris en charge. Les colonnes de jeu de résultats doivent être liées à des variables de programme.
Le serveur ferme automatiquement le curseur lorsque la fin de celui-ci est détectée. L’application doit toujours appeler SQLCloseCursor ou SQLFreeStmt(SQL_CLOSE), mais le pilote n’a pas besoin d’envoyer la demande de fermeture au serveur. Cela permet d'économiser un aller-retour au serveur par le biais du réseau.
L'application demande des curseurs avant uniquement rapides à l'aide de l'attribut d'instruction SQL_SOPT_SS_CURSOR_OPTIONS spécifique au pilote. Lorsqu'ils sont définis avec la valeur SQL_CO_FFO, les curseurs avant uniquement rapides sont activés sans auto-extraction. Lorsqu'ils sont définis sur SQL_CO_FFO_AF, l'option d'auto-extraction est également activée. Pour plus d’informations sur l’autorécupération, consultez Utilisation de l’autorécupération avec des curseurs ODBC.
Les curseurs avant uniquement rapides avec auto-extraction peuvent être utilisés pour extraire un petit jeu de résultats avec un seul aller-retour au serveur. Dans ces étapes, n correspond au nombre de lignes à renvoyer :
Affectez la valeur SQL_CO_FFO_AF à SQL_SOPT_SS_CURSOR_OPTIONS.
Définissez SQL_ATTR_ROW_ARRAY_SIZE sur n + 1.
Lier les colonnes de résultat aux tableaux d’éléments n + 1 (pour être sûr si n + 1 lignes sont réellement extraites).
Ouvrez le curseur avec SQLExecDirect ou SQLExecute.
Si l’état de retour est SQL_SUCCESS, appelez SQLFreeStmt ou SQLCloseCursor pour fermer le curseur. Toutes les données des lignes seront dans les variables de programme liées.
Avec ces étapes, SQLExecDirect ou SQLExecute envoie une demande d’ouverture de curseur avec l’option de saisie automatique activée. Lors de cette demande unique de la part du client, le serveur :
ouvre le curseur ;
génère le jeu de résultats et envoie les lignes au client ;
détecte la fin du curseur et le ferme, la taille de l'ensemble de lignes ayant été définie avec une unité de plus que le nombre de lignes dans le jeu de résultats.