Types 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 des données dans l’application.
Tous les pilotes doivent prendre en charge tous les types de données C. Cela est nécessaire, car tous les pilotes doivent prendre en charge tous les types C vers lesquels ils prennent en charge les types SQL pouvant être convertis, et tous les pilotes prennent en charge au moins un type SQL caractère. Étant donné que le type SQL caractère peut être converti en 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
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 | Odbc C typedef | 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 | flotter |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | double |
SQL_C_BIT | SQLCHAR | caractères non signés |
SQL_C_STINYINT[j] | SQLSCHAR | caractères signés |
SQL_C_UTINYINT[j] | SQLCHAR | caractères non signés |
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 |
identificateur de type C SQL_C_TYPE_DATE[c]
SQL_DATE_STRUCT de typedef ODBC C
type C
struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;[a]
identificateur de type C SQL_C_TYPE_TIME[c]
SQL_TIME_STRUCT typedef ODBC C
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
SQL_NUMERIC_STRUCT de typedef ODBC C
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 de l’année, du mois, du jour, de l’heure, de la minute et des deuxièmes champs 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 milliards de secondes et se situe entre 0 et 999 999 999 999 (1 inférieur à 1 milliard). Par exemple, la valeur du champ de fraction pour un demi-seconde est de 500 000 000, pour un millième de seconde (une milliseconde) est de 1 000 000, pour un millionième de seconde (une microseconde) est de 1 000, et pour un milliardième de seconde (une nanoseconde) est de 1.
[c] Dans ODBC 2.x, les types de données C date, heure et horodatage 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. Lorsqu’une application ODBC 3*.x* fonctionne avec odbc 2.pilote x, 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 la forme d’un entier mis à l’échelle, en mode petit endian (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 à un entier de 1 00010. Comme 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éfinis par le SQL_MAX_NUMERIC_LEN #define.
Pour plus d’informations sur SQL_NUMERIC_STRUCT, consultez HOWTO : Récupération de 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 l’SQL_NUMERIC_STRUCT, il utilise sa propre valeur par défaut spécifique au pilote comme valeur pour le champ précision et utilise la valeur dans le champ SQL_DESC_SCALE du descripteur d’application (valeur par défaut 0) pour le champ de mise à l’échelle . Une application peut fournir ses propres valeurs pour la précision et la mise à 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 s’il est négatif.
[h] _int64 peut ne pas être fourni par certains compilateurs.
[i] _SQL_C_BOOKMARK a été déconseillé 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, et SQL_C_STINYINT et SQL_C_UTINYINT. Pilote ODBC 3*.x* qui doit fonctionner avec ODBC 2.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 peuvent être convertis qu’en SQL_CHAR ou SQL_WCHAR.
Cette section contient la rubrique suivante.