Tipos de datos de C
Los tipos de datos ODBC C indican el tipo de datos de los búferes de C usados para almacenar datos en la aplicación.
Todos los controladores deben admitir todos los tipos de datos de C. Esto es necesario porque todos los controladores deben admitir todos los tipos de C a los que se pueden convertir los tipos sql que admiten y todos los controladores admiten al menos un tipo SQL de carácter. Dado que el tipo de SQL de carácter se puede convertir a y desde todos los tipos de C, todos los controladores deben admitir todos los tipos de C.
El tipo de datos C se especifica en el sqlBindCol de
En las tablas siguientes se enumeran los identificadores de tipo válidos para los tipos de datos de C. En la tabla también se muestra el tipo de datos ODBC C que corresponde a cada identificador y la definición de este tipo de datos.
Identificador de tipo C | Definición de tipos de ODBC C | Tipo de 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 | flotar |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | doble |
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] | MARCADOR | unsigned long int[d] |
SQL_C_VARBOOKMARK | SQLCHAR * | unsigned char * |
Todos los tipos de datos de intervalo de C | SQL_INTERVAL_STRUCT | Consulte la sección estructura de intervalos de C |
identificador de tipo C SQL_C_TYPE_DATE[c]
definición de tipo ODBC C SQL_DATE_STRUCT
de tipo C
struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;[a]
identificador de tipo C SQL_C_TYPE_TIME[c]
definición de tipo ODBC C SQL_TIME_STRUCT
de tipo C
struct tagTIME_STRUCT {
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;[a]
identificador de tipo C SQL_C_TYPE_TIMESTAMP[c]
definición de tipo ODBC C SQL_TIMESTAMP_STRUCT
de tipo C
struct tagTIMESTAMP_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;[b]
} TIMESTAMP_STRUCT;[a]
identificador de tipo C SQL_C_NUMERIC
definición de tipo ODBC C SQL_NUMERIC_STRUCT
de tipo C
struct tagSQL_NUMERIC_STRUCT {
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign[g];
SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]
} SQL_NUMERIC_STRUCT;
identificador de tipo C SQL_C_GUID
definición de tipo ODBC C SQLGUID
de tipo C
struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;[k]
[a] Los valores de los tipos de datos year, month, day, hour, minute y second en los tipos de datos datetime C deben cumplir las restricciones del calendario gregoriano. (Vea restricciones del calendario gregoriano más adelante en este apéndice).
[b] El valor del campo de fracción es el número de mil millones de segundos y oscila entre 0 y 999.999.999 (1 menos de 100 millones). Por ejemplo, el valor del campo de fracción para un medio segundo es 500 000 000, para un milisegundo de segundo (un milisegundo) es de 1 000 000, para un millón de segundos (un microsegundo) es 1000, y para un milésimas de segundo (un nanosegundo) es 1.
[c] En ODBC 2.x, los tipos de datos de fecha, hora y marca de tiempo de C se SQL_C_DATE, SQL_C_TIME y SQL_C_TIMESTAMP.
[d] Las aplicaciones ODBC 3*.x* deben usar SQL_C_VARBOOKMARK, no SQL_C_BOOKMARK. Cuando una aplicación ODBC 3*.x* funciona con ODBC 2.controlador x, el Administrador de controladores ODBC 3*.x* asignará SQL_C_VARBOOKMARK a SQL_C_BOOKMARK.
[e] Un número se almacena en el campo val de la estructura de SQL_NUMERIC_STRUCT como un entero escalado, en modo little endian (el byte más a la izquierda es el byte menos significativo). Por ejemplo, el número 10,001 base 10, con una escala de 4, se escala a un entero de 100010. Dado que se trata de 186AA en formato hexadecimal, el valor de SQL_NUMERIC_STRUCT sería "AA 86 01 00 00... 00", con el número de bytes definidos por el SQL_MAX_NUMERIC_LEN #define.
Para obtener más información sobre SQL_NUMERIC_STRUCT, vea HOWTO: Recuperación de datos numéricos con SQL_NUMERIC_STRUCT.
[f] Los campos de precisión y escala del tipo de datos SQL_C_NUMERIC se usan para la entrada de una aplicación y para la salida del controlador a la aplicación. Cuando el controlador escribe un valor numérico en el SQL_NUMERIC_STRUCT, usará su propio valor predeterminado específico del controlador como valor para el campo precisión y usará el valor en el campo SQL_DESC_SCALE del descriptor de aplicación (que tiene como valor predeterminado 0) para el campo escalado. Una aplicación puede proporcionar sus propios valores para la precisión y la escala estableciendo los campos SQL_DESC_PRECISION y SQL_DESC_SCALE del descriptor de aplicación.
[g] El campo de signo es 1 si es positivo, 0 si es negativo.
[h] es posible que algunos compiladores no proporcionen _int64.
[i] _SQL_C_BOOKMARK ha quedado en desuso en ODBC 3*.x*.
[j] _SQL_C_SHORT, SQL_C_LONG y SQL_C_TINYINT se han reemplazado en ODBC por tipos firmados y sin signo: SQL_C_SSHORT y SQL_C_USHORT, SQL_C_SLONG y SQL_C_ULONG, y SQL_C_STINYINT y SQL_C_UTINYINT. Un controlador ODBC 3*.x* que debe funcionar con ODBC 2.aplicaciones de x deben admitir SQL_C_SHORT, SQL_C_LONG y SQL_C_TINYINT, ya que cuando se les llama, el Administrador de controladores los pasa al controlador.
[k] SQL_C_GUID solo se pueden convertir en SQL_CHAR o SQL_WCHAR.
Esta sección contiene el tema siguiente.
- estructuras de enteros de de 64 bits