Tipos de datos 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 en 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 las funciones SQLBindCol y SQLGetData con el argumento TargetType y en la función SQLBindParameter con el argumento ValueType . También se puede especificar llamando a SQLSetDescField para establecer el campo SQL_DESC_CONCISE_TYPE de un ARD o APD, o llamando a SQLSetDescRec con el argumento Type (y el argumento SubType si es necesario) y el argumento DescriptorHandle establecido en el identificador de un ARD o APD.

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 a la definición de este tipo de datos.

Identificador de tipo de 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 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] 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 del intervalo de C , más adelante en este apéndice.

Identificador de tipo de C SQL_C_TYPE_DATE[c]

Definición de tipos de ODBC C SQL_DATE_STRUCT

Tipo de C

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

Identificador de tipo de C SQL_C_TYPE_TIME[c]

Definición de tipos de ODBC C SQL_TIME_STRUCT

Tipo de C

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

Identificador de tipo de C SQL_C_TYPE_TIMESTAMP[c]

Definición de tipos de ODBC C SQL_TIMESTAMP_STRUCT

Tipo de 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 de C SQL_C_NUMERIC

Definición de tipos de ODBC C SQL_NUMERIC_STRUCT

Tipo de 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 de C SQL_C_GUID

Definición de tipos de ODBC C SQLGUID

Tipo de 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 ajustarse a 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 miles de millones de segundos y oscila entre 0 y 999.999.999 (1 menos de 1 mil millones). Por ejemplo, el valor del campo de fracción de medio segundo es 500.000.000, para un milésima de segundo (un milisegundo) es 1.000.000, para un millón de segundos (un microsegundo) es 1.000 y para un milésima de segundo (un nanosegundo) es 1.

[c] En ODBC 2. x, los tipos de datos de fecha, hora y marca de tiempo de C son 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. x driver, ODBC 3*.x* Driver Manager asignará SQL_C_VARBOOKMARK a SQL_C_BOOKMARK.

[e] Un número se almacena en el campo val de la estructura SQL_NUMERIC_STRUCT como un entero a escala, 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 de 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 de escala . 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. Controlador ODBC 3*.x* que debe funcionar con ODBC 2. Las aplicaciones 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 los temas siguientes.

Consulte también

Tipos de datos C en ODBC