Partager via


Curseurs avant uniquement rapides (ODBC)

Lorsqu'il est connecté à une instance de SQL Server, le pilote ODBC SQL Server Native Client prend en charge des optimisations de performances pour les curseurs avant uniquement 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 tout de même appeler SQLCloseCursor ou SQLFreeStmt(SQL_CLOSE), mais il n'est pas nécessaire pour le pilote d'envoyer une 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'auto-extraction, consultez Utilisation de l'auto-extraction avec les 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 est le nombre de lignes à retourner :

  1. Affectez la valeur SQL_CO_FFO_AF à SQL_SOPT_SS_CURSOR_OPTIONS.

  2. Affectez la valeur n + 1 à SQL_ATTR_ROW_ARRAY_SIZE.

  3. Liez les colonnes de résultats à des tableaux de n + 1 éléments (pour plus de sécurité dans le cas où n + 1 lignes seraient extraites).

  4. Ouvrez le curseur avec SQLExecDirect ou SQLExecute.

  5. 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 d'auto-extraction 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.