Partager via


C en SQL : Caractère

Les identificateurs du type de données ODBC C caractère sont les suivants :

SQL_C_CHAR

SQL_C_WCHAR

Le tableau suivant montre les types de données ODBC SQL vers lesquels les données de caractères C peuvent être converties. Pour obtenir une explication des colonnes et des termes de la table, consultez Conversion de données de C en types de données SQL.

Notes

Lorsque les données de caractère C sont converties en données SQL Unicode, la longueur des données Unicode doit être un nombre pair.

Identificateur de type SQL Test SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
Longueur d’octet des données <= longueur de colonne.

Longueur d’octet des données > Longueur de colonne.
n/a

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
Longueur des caractères des données <= Longueur de colonne.

Longueur des caractères des données > Longueur de la colonne.
n/a

22001
SQL_DECIMAL

SQL_NUMERIC

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER SQL_BIGINT
Données converties sans troncation

Données converties avec troncation de chiffres fractionnaires[e]

La conversion de données entraînerait la perte de chiffres entiers (par opposition à des chiffres fractionnaires)[e]

La valeur de données n’est pas une valeur numérique-littérale
n/a

22001

22001

22018
SQL_REAL

SQL_FLOAT

SQL_DOUBLE
Les données se trouvent dans la plage du type de données vers lequel le nombre est en cours de conversion

Les données se trouvent en dehors de la plage du type de données vers lequel le nombre est en cours de conversion

La valeur de données n’est pas une valeur numérique-littérale
n/a

22003

22018
SQL_BIT Données 0 ou 1

Les données sont supérieures à 0, inférieures à 2 et non égales à 1

Les données sont inférieures à 0 ou supérieures à 2

Les données ne sont pas un littéral numérique
n/a

22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(Longueur d’octet des données) / 2 <= longueur d’octet de colonne

(Longueur d’octet des données) / longueur d’octet de 2 > colonnes

La valeur de données n’est pas une valeur hexadécimale
n/a

22001

22018
SQL_TYPE_DATE La valeur de données est une valeur ODBC-date-littéral valide

La valeur de données est un odbc-timestamp-literal valide ; la partie de temps est égale à zéro

La valeur de données est un odbc-timestamp-literal valide ; la partie time est différente de zéro[a]

La valeur de données n’est pas une valeur ODBC-date-literal ou ODBC-timestamp-literal valide
n/a

n/a

22008

22018
SQL_TYPE_TIME La valeur de données est un littéral de temps ODBC valide

La valeur de données est un odbc-timestamp-literal valide ; fractionnaire secondes la partie est égale à zéro[b]

La valeur de données est un odbc-timestamp-literal valide ; fractionnaire secondes la partie est différente de zéro[b]

La valeur de données n’est pas un ODBC-time-literal ou ODBC-timestamp-literal valide
n/a

n/a

22008

22018
SQL_TYPE_TIMESTAMP La valeur de données est un odbc-timestamp-literal valide ; fractionnaire secondes non tronquée

La valeur de données est un odbc-timestamp-literal valide ; fractionnaire secondes tronquée

La valeur de données est une valeur ODBC-date-literal[c] valide

La valeur de données est un littéral de temps ODBC valide[d]

La valeur de données n’est pas un ODBC-date-literal, ODBC-time-literal ou ODBC-timestamp-literal valide
n/a

22008

n/a

n/a

22018
Tous les types d’intervalle SQL La valeur de données est une valeur d’intervalle valide ; aucune troncation ne se produit

La valeur de données est une valeur d’intervalle valide ; la valeur de l’un des champs est tronquée

La valeur de données n’est pas un littéral d’intervalle valide
n/a

22015

22018

[a] La partie heure de l’horodatage est tronquée.

[b] La partie date de l’horodatage est ignorée.

[c] La partie heure de l’horodatage est définie sur zéro.

[d] La partie date de l’horodatage est définie sur la date actuelle.

[e] Le pilote/la source de données attend effectivement que la chaîne entière ait été reçue (même si les données de caractères sont envoyées en morceaux par des appels à SQLPutData) avant de tenter d’effectuer la conversion.

Lorsque les données de caractère C sont converties en données SQL numériques, de date, d’heure ou d’horodatage, les vides de début et de fin sont ignorés.

Lorsque les données de caractère C sont converties en données SQL binaires, les deux octets de données caractères sont convertis en un seul octet (8 bits) de données binaires. Chaque deux octets de données de caractères représentent un nombre sous forme hexadécimale. Par exemple, « 01 » est converti en un 00000001 binaire et « FF » est converti en 11111111 binaire.

Le pilote convertit toujours des paires de chiffres hexadécimaux en octets individuels et ignore l’octet de terminaison Null. De ce fait, si la longueur de la chaîne de caractères est impaire, le dernier octet de la chaîne (à l’exception de l’octet de terminaison Null, le cas échéant) n’est pas converti.

Notes

Les développeurs d’applications sont découragés de lier des données en caractère C à un type de données SQL binaire. Cette conversion est généralement inefficace et lente.