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.