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, elle appelle SQLAllocHandle avec le paramètre HandleType défini à 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 ; en outre, leurs paramètres actuels sont récupérés via 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 à SQL_ATTR_LOGIN_TIMEOUT permet de contrôler le délai d'attente d'une application avant l'expiration d'une tentative de connexion (la valeur 0 spécifie un délai d'attente infini). 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 à SQL_ATTR_QUERY_TIMEOUT permet d'établir un délai d'expiration de requête qui contribue à protéger le serveur et l'utilisateur contre les requêtes longues.
L'appel de SQLSetStmtAttr avec fOption défini à SQL_ATTR_MAX_LENGTH permet de limiter la quantité de données text et image qu'une instruction individuelle peut récupérer. L'appel de SQLSetStmtAttr avec fOption défini à SQL_ATTR_MAX_ROWS permet également de limiter 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.