Type de données C

Les types de données ODBC C indiquent le type de données des mémoires tampons C utilisées pour stocker les données dans l’application.

Tous les pilotes doivent prendre en charge tous les types de données C. Cela est obligatoire, car tous les pilotes doivent prendre en charge tous les types C pour lesquels les types SQL qu’ils prennent en charge peuvent être convertis, et tous les pilotes prennent en charge au moins un type SQL de caractère. Étant donné que le type SQL de caractère peut être converti vers et à partir de tous les types C, tous les pilotes doivent prendre en charge tous les types C.

Le type de données C est spécifié dans les fonctions SQLBindCol et SQLGetData avec l’argument TargetType et dans la fonction SQLBindParameter avec l’argument ValueType . Il peut également être spécifié en appelant SQLSetDescField pour définir le champ SQL_DESC_CONCISE_TYPE d’un champ ARD ou APD, ou en appelant SQLSetDescRec avec l’argument Type (et l’argument SubType si nécessaire) et l’argument DescriptorHandle défini sur le handle d’un ARD ou DPD.

Les tableaux suivants répertorient les identificateurs de type valides pour les types de données C. Le tableau répertorie également le type de données ODBC C qui correspond à chaque identificateur et la définition de ce type de données.

Identificateur de type C Typedef ODBC C Type C
SQL_C_CHAR SQLCHAR * unsigned char *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT short int
SQL_C_USHORT[j] SQLUSMALLINT unsigned short int
SQL_C_SLONG[j] SQLINTEGER long int
SQL_C_ULONG[j] SQLUINTEGER unsigned long int
SQL_C_FLOAT SQLREAL float
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT double
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR signed char
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h]
SQL_C_BINARY SQLCHAR * unsigned char *
SQL_C_BOOKMARK[i] SIGNET unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR * unsigned char *
Tous les types de données d’intervalle C SQL_INTERVAL_STRUCT Consultez la section Structure des intervalles C , plus loin dans cette annexe.

Identificateur de type C SQL_C_TYPE_DATE[c]

Typedef ODBC C SQL_DATE_STRUCT

Type C

struct tagDATE_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;    
} DATE_STRUCT;[a]  

Identificateur de type C SQL_C_TYPE_TIME[c]

Typedef ODBC C SQL_TIME_STRUCT

Type C

struct tagTIME_STRUCT {  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
} TIME_STRUCT;[a]  

Identificateur de type C SQL_C_TYPE_TIMESTAMP[c]

Typedef ODBC C SQL_TIMESTAMP_STRUCT

Type C

struct tagTIMESTAMP_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
   SQLUINTEGER fraction;[b]   
} TIMESTAMP_STRUCT;[a]  

Identificateur de type C SQL_C_NUMERIC

Typedef ODBC C SQL_NUMERIC_STRUCT

Type C

struct tagSQL_NUMERIC_STRUCT {  
   SQLCHAR precision;  
   SQLSCHAR scale;  
   SQLCHAR sign[g];  
   SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]   
} SQL_NUMERIC_STRUCT;  

Identificateur de type C SQL_C_GUID

Typedef ODBC C SQLGUID

Type C

struct tagSQLGUID {  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];  
} SQLGUID;[k]  

[a] Les valeurs des champs année, mois, jour, heure, minute et deuxième des types de données C datetime doivent être conformes aux contraintes du calendrier grégorien. (Voir Contraintes du calendrier grégorien plus loin dans cette annexe.)

[b] La valeur du champ de fraction est le nombre de milliardsièmes de seconde et varie entre 0 et 999 999 999 999 (1 inférieur à 1 milliard). Par exemple, la valeur du champ de fraction pour une demi-seconde est 500 000 000, pour un millième de seconde (une milliseconde) est 1 000 000, pour un millionième de seconde (une microseconde) est 1 000, et pour un milliardième de seconde (une nanoseconde) est 1.

[c] Dans ODBC 2. x, les types de données de date, d’heure et d’horodatage C sont SQL_C_DATE, SQL_C_TIME et SQL_C_TIMESTAMP.

[d] Les applications ODBC 3*.x* doivent utiliser SQL_C_VARBOOKMARK et non SQL_C_BOOKMARK. Quand une application ODBC 3*.x* fonctionne avec odbc 2. x pilote, le Gestionnaire de pilotes ODBC 3*.x* mappe SQL_C_VARBOOKMARK à SQL_C_BOOKMARK.

[e] Un nombre est stocké dans le champ val de la structure SQL_NUMERIC_STRUCT sous forme d’entier mis à l’échelle, en mode endian petit (l’octet le plus à gauche étant l’octet le moins significatif). Par exemple, le nombre 10.001 base 10, avec une échelle de 4, est mis à l’échelle sur un entier de 100010. Étant donné qu’il s’agit de 186AA au format hexadécimal, la valeur dans SQL_NUMERIC_STRUCT serait « AA 86 01 00 00 ... 00 », avec le nombre d’octets défini par le #define SQL_MAX_NUMERIC_LEN.

Pour plus d’informations sur SQL_NUMERIC_STRUCT, consultez COMMENT : récupérer des données numériques avec SQL_NUMERIC_STRUCT.

[f] Les champs de précision et d’échelle du type de données SQL_C_NUMERIC sont utilisés pour l’entrée d’une application et pour la sortie du pilote vers l’application. Lorsque le pilote écrit une valeur numérique dans le SQL_NUMERIC_STRUCT, il utilise sa propre valeur par défaut spécifique au pilote comme valeur pour le champ de précision , et il utilise la valeur dans le champ de SQL_DESC_SCALE du descripteur d’application (dont la valeur par défaut est 0) pour le champ d’échelle . Une application peut fournir ses propres valeurs pour la précision et l’échelle en définissant les champs SQL_DESC_PRECISION et SQL_DESC_SCALE du descripteur d’application.

[g] Le champ de signe est 1 si positif, 0 si négatif.

[h] _int64 peut ne pas être fourni par certains compilateurs.

[i] _SQL_C_BOOKMARK a été déprécié dans ODBC 3*.x*.

[j] _SQL_C_SHORT, SQL_C_LONG et SQL_C_TINYINT ont été remplacés dans ODBC par des types signés et non signés : SQL_C_SSHORT et SQL_C_USHORT, SQL_C_SLONG et SQL_C_ULONG, SQL_C_STINYINT et SQL_C_UTINYINT. Un pilote ODBC 3*.x* qui doit fonctionner avec ODBC 2. Les applications x doivent prendre en charge SQL_C_SHORT, SQL_C_LONG et SQL_C_TINYINT, car lorsqu’elles sont appelées, le Gestionnaire de pilotes les transmet au pilote.

[k] SQL_C_GUID ne peut être converti qu’en SQL_CHAR ou SQL_WCHAR.

Cette section contient la rubrique suivante.

Voir aussi

Types de données C dans ODBC