Cambios de comportamiento
Los cambios de comportamiento son los cambios para los que la sintaxis de la interfaz sigue siendo la misma, pero la semántica ha cambiado. Para estos cambios, la funcionalidad usada en ODBC 2.x se comporta de forma diferente a la misma funcionalidad en ODBC 3.x.
El hecho de que una aplicación muestre un comportamiento de ODBC 2.x o un comportamiento de ODBC 3.x viene determinado por el atributo de entorno SQL_ATTR_ODBC_VERSION. Este valor de 32 bits se establece en SQL_OV_ODBC2 para mostrar el comportamiento de ODBC 2.x y SQL_OV_ODBC3 para mostrar el comportamiento de ODBC 3.x.
El atributo de entorno SQL_ATTR_ODBC_VERSION se establece mediante una llamada a SQLSetEnvAttr. Una vez que una aplicación llama a SQLAllocHandle para asignar un identificador de entorno, debe llamar a SQLSetEnvAttr inmediatamente para establecer el comportamiento que muestra. (Como resultado, hay un nuevo estado de entorno para describir el identificador de entorno en un estado asignado, pero sin versiones). Para obtener más información, consulte el Anexo B: Tablas de transición de estado ODBC.
Una aplicación indica qué comportamiento presenta con el atributo de entorno SQL_ATTR_ODBC_VERSION, pero el atributo no tiene ningún efecto en la conexión de la aplicación con el controlador ODBC 2.x o ODBC 3.x. Una aplicación de ODBC 3.x puede conectarse a un controlador ODBC 2.x o 3.x, independientemente de cuál sea el valor del atributo de entorno.
Las aplicaciones de ODBC 3.x nunca deben llamar a SQLAllocEnv. Como resultado, si el Administrador de controladores recibe una llamada a SQLAllocEnv, reconoce la aplicación como aplicación de ODBC 2.x.
El atributo SQL_ATTR_ODBC_VERSION afecta a tres aspectos diferentes del comportamiento de un controlador ODBC 3.x:
SQLSTATE
Tipos de datos para fecha, hora y marca de tiempo
El argumento CatalogName de SQLTables acepta los patrones de búsqueda en ODBC 3.x, pero no en ODBC 2.x.
El valor del atributo de entorno SQL_ATTR_ODBC_VERSION no afecta a SQLSetParam ni SQLBindParam. SQLColAttribute tampoco se ve afectado por este bit. Aunque SQLColAttribute devuelve atributos afectados por la versión de ODBC (tipo de fecha, precisión, escala y longitud), el comportamiento previsto viene determinado por el valor del argumento FieldIdentifier. Cuando FieldIdentifier es igual a SQL_DESC_TYPE, SQLColAttribute devuelve códigos de ODBC 3.x para la fecha, la hora y la marca de tiempo; cuando FieldIdentifier es igual a SQL_COLUMN_TYPE, SQLColAttribute devuelve códigos de ODBC 2.x para la fecha, la hora y la marca de tiempo.
Esta sección contiene los temas siguientes.