Conversion de données de SQL en types de données C

Lorsqu’une application appelle SQLFetch, SQLFetchScroll ou SQLGetData, le pilote récupère les données de la source de données. Si nécessaire, il convertit les données du type de données dans lequel le pilote l’a récupéré en type de données spécifié par l’argument TargetType dans SQLBindCol ou SQLGetData. Enfin, il stocke les données à l’emplacement vers lequel pointe l’argument TargetValuePtr dans SQLBindCol ou SQLGetData (et le champ SQL_DESC_DATA_PTR de l’ARD).

Le tableau suivant montre les conversions prises en charge des types de données ODBC SQL vers des types de données ODBC C. Un cercle rempli indique la conversion par défaut d’un type de données SQL (le type de données C vers lequel les données seront converties lorsque la valeur de TargetType est SQL_C_DEFAULT). Un cercle creux indique une conversion prise en charge.

Pour une application ODBC 3.x fonctionnant avec un pilote ODBC 2.x , la conversion à partir de types de données spécifiques au pilote peut ne pas être prise en charge.

Le format des données converties n’est pas affecté par le paramètre pays/région Windows.

Les tableaux des sections suivantes décrivent comment le pilote ou la source de données convertit les données récupérées à partir de la source de données ; les pilotes sont nécessaires pour prendre en charge les conversions vers tous les types de données ODBC C à partir des types de données ODBC SQL qu’ils prennent en charge. Pour un type de données ODBC SQL donné, la première colonne de la table répertorie les valeurs d’entrée légales de l’argument TargetType dans SQLBindCol et SQLGetData. La deuxième colonne répertorie les résultats d’un test, souvent à l’aide de l’argument BufferLength spécifié dans SQLBindCol ou SQLGetData, que le pilote effectue pour déterminer s’il peut convertir les données. Pour chaque résultat, les troisième et quatrième colonnes répertorient les valeurs placées dans les mémoires tampons spécifiées par targetValuePtr et StrLen_or_IndPtr arguments spécifiés dans SQLBindCol ou SQLGetData une fois que le pilote a tenté de convertir les données. (Le StrLen_or_IndPtr argument correspond au champ SQL_DESC_OCTET_LENGTH_PTR de l’ARD.) La dernière colonne répertorie le SQLSTATE retourné pour chaque résultat par SQLFetch, SQLFetchScroll ou SQLGetData.

Si l’argument TargetType dans SQLBindCol ou SQLGetData contient un identificateur pour un type de données ODBC C non affiché dans le tableau d’un type de données ODBC SQL donné, SQLFetch, SQLFetchScroll ou SQLGetData retourne SQLSTATE 07006 (violation d’attribut de type de données restreint). Si l’argument TargetType contient un identificateur qui spécifie une conversion d’un type de données SQL spécifique au pilote vers un type de données ODBC C et que cette conversion n’est pas prise en charge par le pilote, SQLFetchScroll ou SQLGetData retourne SQLSTATE HYC00 (fonctionnalité facultative non implémentée).

Bien qu’il ne soit pas affiché dans les tables, le pilote retourne SQL_NULL_DATA dans la mémoire tampon spécifiée par l’argument StrLen_or_IndPtr lorsque la valeur de données SQL est NULL. Pour obtenir une explication de l’utilisation de StrLen_or_IndPtr lorsque plusieurs appels sont effectués pour récupérer des données, consultez la description de la fonction SQLGetData . Lorsque les données SQL sont converties en données C de caractère, le nombre de caractères retourné dans *StrLen_or_IndPtr n’inclut pas l’octet de terminaison Null. Si TargetValuePtr est un pointeur Null, SQLGetData retourne SQLSTATE HY009 (utilisation non valide du pointeur null) ; dans SQLBindCol, cette opération annule la liaison de la colonne.

Les termes et conventions suivants sont utilisés dans les tables :

  • La longueur d’octets des données est le nombre d’octets de données C disponibles pour retourner dans *TargetValuePtr, que les données soient tronquées ou non avant qu’elles ne soient retournées à l’application. Pour les données de chaîne, cela n’inclut pas l’espace pour le caractère de terminaison Null.

  • La longueur d’octet de caractère correspond au nombre total d’octets nécessaires pour afficher les données au format caractère. Cela est défini pour chaque type de données C dans la section Taille d’affichage, sauf que la longueur d’octet de caractère est en octets pendant que la taille d’affichage est en caractères.

  • Les mots en italique représentent des arguments de fonction ou des éléments de la grammaire SQL. Pour connaître la syntaxe des éléments de grammaire, consultez l’annexe C : Grammaire SQL.

Cette section contient les rubriques suivantes :