Tipos de datos C en ODBC

ODBC define los tipos de datos C que usan las variables de aplicación y sus identificadores de tipo correspondientes. Estos se usan en los búferes enlazados a las columnas del conjunto de resultados y los parámetros de instrucción. Por ejemplo, supongamos que una aplicación quiere recuperar datos de una columna del conjunto de resultados en formato de caracteres. Declara una variable con el tipo de datos SQLCHAR * y enlaza esta variable a la columna del conjunto de resultados con un identificador de tipo de SQL_C_CHAR. Para ver una lista completa de los tipos de datos C y los identificadores de los tipos, consulte el Anexo D: Tipos de datos.

ODBC también define una asignación predeterminada de cada tipo de datos SQL a un tipo de datos C. Por ejemplo, un entero de 2 bytes en el origen de datos se asigna a un entero de 2 bytes en la aplicación. Para usar la asignación predeterminada, una aplicación especifica el identificador de tipo SQL_C_DEFAULT. Sin embargo, no se recomienda usar este identificador por motivos de interoperabilidad.

Todos los tipos de datos enteros de C definidos en ODBC 1.x se han firmado. Los tipos de datos C sin firmar y sus identificadores de tipo correspondientes se agregaron en ODBC 2.0. Debido a esto, las aplicaciones y los controladores deben tener especial cuidado al tratar con las versiones 1.x.

Extensibilidad del tipo de datos C

En ODBC 3.8, puede especificar tipos de datos C específicos del controlador. Esto le permite enlazar un tipo SQL como un tipo C específico del controlador en aplicaciones de ODBC cuando se llama a SQLBindCol, SQLGetData o SQLBindParameter. Esto puede ser útil para admitir nuevos tipos de servidor, ya que es posible que los tipos de datos C existentes no representen correctamente los nuevos tipos de datos de servidor. El uso de tipos C específicos del controlador puede aumentar el número de conversiones que pueden realizar los controladores.

Por ejemplo, supongamos que un sistema de administración de bases de datos (DBMS) introdujo un nuevo tipo SQL, DATETIMEOFFSET, para representar la fecha y hora con información de zona horaria. No habría ningún tipo C específico en ODBC que correspondiera a DATETIMEOFFSET. Una aplicación tendría que enlazar DATETIMEOFFSET como SQL_C_BINARY y convertirlo en un tipo de datos definido por el usuario. A partir de ODBC 3.8 con extensibilidad del tipo de datos C, un controlador puede definir un nuevo tipo C correspondiente. Por ejemplo, para el nuevo tipo SQL DATETIMEOFFSET, el controlador puede definir un nuevo tipo C correspondiente, como SQL_C_DATETIMEOFFSET. A continuación, una aplicación puede enlazar el nuevo tipo SQL como un tipo C específico del controlador.

Un tipo de datos C se define en el controlador de la siguiente manera:

  • El nivel de cumplimiento de ODBC para una aplicación, un controlador ODBC y el Administrador de controladores es 3.8 (o superior).

  • El intervalo de datos de un tipo C específico del controlador está entre 0x4000 y 0x7FFF.

  • El controlador define la estructura de los datos correspondientes al tipo C. Esto se puede hacer en el SDK específico del controlador.

El Administrador de controladores no validará un tipo C definido en el intervalo de 0x4000 y 0x7FFF; el controlador realizará la validación y cualquier conversión de tipo de datos. Pero si el intervalo de datos de un tipo C pasado al Administrador de controladores está entre 0x0000 y 0x3FFF o entre 0x8000 y 0xFFFF, el Administrador de controladores validará el tipo de datos C.

Nota:

Los tipos de datos C específicos del controlador deberían estar descritos en la documentación del controlador.

Para especificar un nivel de cumplimiento de ODBC de 3.8, una aplicación llama a SQLSetEnvAttr con el atributo SQL_ATTR_ODBC_VERSION establecido en SQL_OV_ODBC3_80. Para determinar la versión del controlador, una aplicación llama a SQLGetInfo con SQL_DRIVER_ODBC_VER.

Para obtener más información sobre ODBC 3.8, consulte Novedades de ODBC 3.8.

Consulte también

Tipos de datos C