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

Lorsqu’une application appelle SQLExecute ou SQLExecDirect, le pilote récupère les données de tous les paramètres liés à SQLBindParameter à partir d’emplacements de stockage dans l’application. Lorsqu’une application appelle SQLSetPos, le pilote récupère les données d’une mise à jour ou d’une opération d’ajout à partir de colonnes liées à SQLBindCol. Pour les paramètres de données au niveau de l’exécution, l’application envoie les données de paramètre avec SQLPutData. Si nécessaire, le pilote convertit les données du type de données spécifié par l’argument ValueType dans SQLBindParameter en type de données spécifié par l’argument ParameterType dans SQLBindParameter, puis envoie les données à la source de données.

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

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

Supported conversions: ODBC C to SQL data types

Les tableaux des sections suivantes décrivent comment le pilote ou la source de données convertit les données envoyées à la source de données ; les pilotes sont nécessaires pour prendre en charge les conversions de tous les types de données ODBC C vers les types de données ODBC SQL qu’ils prennent en charge. Pour un type de données ODBC C donné, la première colonne de la table répertorie les valeurs d’entrée légales de l’argument ParameterType dans SQLBindParameter. La deuxième colonne répertorie les résultats d’un test effectué par le pilote pour déterminer s’il peut convertir les données. La troisième colonne répertorie le SQLSTATE retourné pour chaque résultat par SQLExecDirect, SQLExecute, SQLBulkOperations, SQLSetPos ou SQLPutData. Les données sont envoyées à la source de données uniquement si SQL_SUCCESS est retournée.

Si l’argument ParameterType dans SQLBindParameter contient l’identificateur d’un type de données ODBC SQL qui n’est pas affiché dans le tableau d’un type de données C donné, SQLBindParameter retourne SQLSTATE 07006 (violation d’attribut de type de données restreint). Si l’argument ParameterType contient un identificateur spécifique au pilote et que le pilote ne prend pas en charge la conversion du type de données ODBC C spécifique à ce type de données SQL spécifique au pilote, SQLBindParameter retourne SQLSTATE HYC00 (fonctionnalité facultative non implémentée).

Si les arguments ParameterValuePtr et StrLen_or_IndPtr spécifiés dans SQLBindParameter sont à la fois des pointeurs Null, cette fonction retourne SQLSTATE HY009 (utilisation non valide du pointeur Null). Bien qu’elle ne soit pas affichée dans les tables, une application définit la valeur de la mémoire tampon de longueur/indicateur pointée par l’argument StrLen_or_IndPtr de SQLBindParameter ou la valeur de l’argument StrLen_or_IndPtr de SQLPutData à SQL_NULL_DATA pour spécifier une valeur de données SQL NULL. (Le StrLen_or_IndPtr argument correspond au champ SQL_DESC_OCTET_LENGTH_PTR de l’APD.) L’application définit ces valeurs sur SQL_NTS pour spécifier que la valeur dans *ParameterValuePtr dans SQLBindParameter ou *DataPtr dans SQLPutData (pointé par le champ SQL_DESC_DATA_PTR de l’APD) est une chaîne terminée par null.

Les termes suivants sont utilisés dans les tables :

  • Longueur d’octet des données : nombre d’octets de données SQL disponibles pour l’envoi à la source de données, que les données soient tronquées ou non avant d’être envoyées à la source de données. Pour les données de chaîne, cela n’inclut pas d’espace pour le caractère de terminaison Null.

  • Longueur d’octet de colonne : nombre d’octets requis pour stocker les données à la source de données.

  • Longueur d’octet de caractère : nombre maximal d’octets nécessaires pour afficher les données sous forme de caractères. Cela est défini pour chaque type de données SQL en taille d’affichage, à l’exception de la longueur d’octet de caractère en octets, tandis que la taille d’affichage est en caractères.

  • Nombre de chiffres : nombre de caractères utilisés pour représenter un nombre, y compris le signe moins, la virgule décimale et l’exposant (si nécessaire).

  • Mots dans
    italique : é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 :