SQLBindCol
En règle générale, tenez compte des implications de l’utilisation de SQLBindCol pour provoquer la conversion de données. Les conversions de liaison sont des processus clients. Ainsi, par exemple, l'extraction d'une valeur à virgule flottante liée à une colonne de type character conduit le pilote à effectuer localement la conversion du type de données float en character lorsqu'une ligne est extraite. La fonction Transact-SQL CONVERT peut être utilisée pour placer le coût de la conversion des données sur le serveur.
Une instance de SQL Server peut retourner plusieurs ensembles de lignes de résultats sur une seule exécution d’instruction. Chaque jeu de résultats doit être lié séparément. Pour plus d’informations sur la liaison pour plusieurs jeux de résultats, consultez SQLMoreResults.
Le développeur peut lier des colonnes à des types de données C spécifiques à SQL Server à l’aide de la valeur SQL_C_BINARY
TargetType . Les colonnes liées à des types spécifiques à SQL Server ne sont pas portables. Les types de données ODBC C spécifiques à SQL Server définis correspondent aux définitions de type pour DB-Library, et DB-Library développeurs qui effectuent le portage d’applications peuvent vouloir tirer parti de cette fonctionnalité.
La troncation des données de création de rapports est un processus coûteux pour le pilote ODBC SQL Server Native Client. Vous pouvez éviter la troncation en veillant à ce que toutes les mémoires tampons de données liées soient suffisamment grandes pour retourner des données. Pour les données de type character, la largeur doit inclure l'espace nécessaire pour un indicateur de fin de chaîne lorsque le comportement par défaut du pilote pour l'indicateur de fin de chaîne est utilisé. Par exemple, la liaison d’une colonne char(5) SQL Server à un tableau de cinq caractères entraîne une troncation pour chaque valeur extraite. La liaison de la même colonne à un tableau de six caractères évite la troncation en fournissant un élément de type character dans lequel stocker l'indicateur de fin null. SQLGetData peut être utilisé pour récupérer efficacement des données binaires et de caractères longs sans troncation.
Pour les types de données à grande valeur, si la mémoire tampon fournie par l’utilisateur n’est pas assez grande pour contenir la valeur entière de la colonne, SQL_SUCCESS_WITH_INFO
est retournée et les « données de chaîne ; right troncation » avertissement est émis. L'argument StrLen_or_IndPtr
contient le nombre de chars/octets stockés dans la mémoire tampon.
Prise en charge par SQLBindCol des fonctionnalités de date et heure améliorées
Les valeurs de colonne de résultat des types date/heure sont converties comme décrit dans Conversions de SQL en C. Notez que pour récupérer les colonnes time et datetimeoffset en tant que structures correspondantes (SQL_SS_TIME2_STRUCT
et SQL_SS_TIMESTAMPOFFSET_STRUCT), TargetType doit être spécifié sous la forme SQL_C_DEFAULT
ou SQL_C_BINARY
.
Pour plus d’informations, consultez Améliorations de date et d’heure (ODBC).
Prise en charge de SQLBindCol pour les UDT CLR volumineux
SQLBindCol prend en charge les grands types CLR définis par l’utilisateur (UDT). Pour plus d’informations, consultez Grands types de User-Defined CLR (ODBC).