Asignación de función en el Administrador de controladores
El administrador de controladores admite dos puntos de entrada para las funciones que toman argumentos de cadena. La función no representativa (SQLDriverConnect) es la forma ANSI de la función. El formulario Unicode está representada con un W (SQLDriverConnectW).
El archivo de encabezado ODBC también admite funciones representadas con A, (SQLDriverConnectA) para mayor facilidad para las aplicaciones ANSI/Unicode mixtas. Las llamadas realizadas a las funciones A realmente son llamadas al punto de entrada no representativo (SQLDriverConnect).
Si la aplicación se compila con el #define de _UNICODE, el archivo de encabezado ODBC asignará llamadas de función no representativas (SQLDriverConnect) a la versión Unicode (SQLDriverConnectW).
El Administrador de controladores reconoce un controlador como un controlador Unicode si el controlador admite SQLConnectW.
Si el controlador es un controlador Unicode, el Administrador de controladores realiza llamadas de función de la siguiente manera:
Pasa una función sin argumentos de cadena o parámetros directamente a través del controlador.
Pasa las funciones Unicode (con el sufijo W) directamente a través del controlador.
Convierte una función ANSI (con el sufijo A) en una función Unicode (con el sufijo W) convirtiendo los argumentos de cadena en caracteres Unicode y pasa la función Unicode al controlador.
Si el controlador es un controlador ANSI, el Administrador de controladores realiza llamadas de función de la siguiente manera:
Pasa funciones sin argumentos de cadena o parámetros directamente a través del controlador.
Convierte funciones Unicode (con el sufijo W) en una llamada de función ANSI y la pasa al controlador.
Pasa una función ANSI directamente al controlador.
El Administrador de controladores está habilitado internamente para Unicode. Como resultado, una aplicación Unicode obtiene el rendimiento óptimo trabajando con un controlador Unicode, ya que el Administrador de controladores simplemente pasa funciones Unicode al controlador. Cuando una aplicación ANSI trabaja con un controlador ANSI, el Administrador de controladores debe convertir cadenas de ANSI a Unicode al procesar algunas funciones, como SQLDriverConnect. Después de procesar la función, el Administrador de controladores debe volver a convertir la cadena Unicode en ANSI antes de enviar la función al controlador ANSI.
Una aplicación no debe modificar ni leer sus búferes de parámetros enlazados cuando el controlador devuelve SQL_STILL_EXECUTING o SQL_NEED_DATA. El Administrador de controladores deja los búferes enlazados a ANSI hasta que el controlador devuelva SQL_SUCCESS, SQL_SUCCESS_WITH_INFO o SQL_ERROR. Una aplicación multiproceso no debe obtener acceso a ningún valor de parámetro enlazado en el que otro subproceso ejecute una instrucción SQL. El Administrador de controladores convierte los datos de Unicode a ANSI en el lugar y el otro subproceso podría ver datos ANSI en estos búferes mientras el controlador sigue procesando la instrucción SQL. Las aplicaciones que enlazan datos Unicode a un controlador ANSI no deben enlazar dos columnas diferentes a la misma dirección.