Compartir a través de


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 y funciones sqlGetData con el argumento TargetType y en la función sqlBindParameter con el argumento ValueType de . También se puede especificar mediante una llamada 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 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 , más adelante en este apéndice.

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.

Consulte también

tipos de datos de C en ODBC