Allocation d'un descripteur d'instruction
Pour qu'une application puisse exécuter une instruction, elle doit allouer un descripteur d'instruction. Pour ce faire, il appelle SQLAllocHandle avec le paramètre HandleType défini sur SQL_HANDLE_STMT et InputHandle pointant vers un handle de connexion.
Les attributs d'instruction sont caractéristiques du descripteur d'instruction. Les exemples d'attributs d'instruction peuvent inclure l'utilisation de signets et le type de curseur à utiliser avec le jeu de résultats de l'instruction. Les attributs d’instruction sont définis avec SQLSetStmtAttr et leurs paramètres actuels sont récupérés à l’aide de SQLGetStmtAttr. Il n'y a aucune obligation pour une application de définir des attributs d'instruction ; tous les attributs d'instruction ont des valeurs par défaut, et certaines sont spécifiques aux pilotes.
Soyez prudent lorsque vous utilisez plusieurs options de connexion et d'instruction ODBC. L’appel de SQLSetConnectAttr avec fOption défini sur SQL_ATTR_LOGIN_TIMEOUT contrôle la durée pendant laquelle une application attend qu’une tentative de connexion expire en attendant d’établir une connexion (0 spécifie une attente infinie). Sur les sites dont les temps de réponse sont longs, il est possible de définir cette valeur à un niveau élevé pour s'assurer que les connexions disposent d'un délai suffisant pour s'effectuer. Toutefois, l'intervalle doit toujours être suffisamment faible pour qu'une réponse soit fournie à l'utilisateur dans un délai raisonnable, si le pilote ne peut pas se connecter.
L’appel de SQLSetStmtAttr avec fOption défini sur SQL_ATTR_QUERY_TIMEOUT définit un intervalle de délai d’attente de requête pour protéger le serveur et l’utilisateur contre les requêtes de longue durée.
L’appel de SQLSetStmtAttr avec fOption défini sur SQL_ATTR_MAX_LENGTH limite la quantité de données texte et image qu’une instruction individuelle peut récupérer. L’appel de SQLSetStmtAttr avec fOption défini sur SQL_ATTR_MAX_ROWS limite également un ensemble de lignes aux n premières lignes si c’est tout ce dont l’application a besoin. Notez que la définition de SQL_ATTR_MAX_ROWS oblige le pilote à émettre une instruction SET ROWCOUNT à destination du serveur. Cela affecte toutes les instructions Microsoft SQL Server, y compris les déclencheurs et les mises à jour.
Soyez prudent lorsque vous définissez ces options. Il est préférable que tous les descripteurs d'instruction d'un handle de connexion aient les mêmes paramètres pour SQL_ATTR_MAX_LENGTH et SQL_ATTR_MAX_ROWS. Si le pilote passe d'un descripteur d'instruction à un autre avec des valeurs différentes pour ces options, il doit générer les instructions SET TEXTSIZE et SET ROWCOUNT appropriées pour modifier les paramètres. Le pilote ne peut pas placer ces instructions dans le même lot que l'instruction SQL utilisateur, car cette dernière peut contenir une instruction qui doit être la première dans un lot. Le pilote doit envoyer les instructions SET TEXTSIZE et SET ROWCOUNT dans un lot séparé, ce qui génère automatiquement un aller-retour supplémentaire au serveur.