Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La pregunta, entonces, ¿cómo normaliza ODBC el acceso a las bases de datos? Hay dos requisitos arquitectónicos:
Las aplicaciones deben poder acceder a varios DBMS con el mismo código fuente sin volver a compilar ni volver a vincular.
Las aplicaciones deben poder acceder a varios DBMS simultáneamente.
Y hay una pregunta más, debido a la realidad de Marketplace:
- ¿Qué características de DBMS deben exponer ODBC? ¿Solo las características que son comunes a todos los DBMS o cualquier característica que esté disponible en cualquier DBMS?
ODBC resuelve estos problemas de la siguiente manera:
ODBC es una interfaz de nivel de llamada. Para solucionar el problema de cómo las aplicaciones acceden a varios DBMS mediante el mismo código fuente, ODBC define una CLI estándar. Contiene todas las funciones de las especificaciones de la CLI de Open Group e ISO/IEC y proporciona funciones adicionales que normalmente requieren las aplicaciones.
Se requiere una biblioteca o controlador diferente para cada DBMS que admita ODBC. El controlador implementa las funciones en la API ODBC. Para usar otro controlador, no es necesario volver a compilar ni vincular la aplicación. En su lugar, la aplicación simplemente carga el nuevo controlador y llama a las funciones en él. Para acceder a varios DBMS simultáneamente, la aplicación carga varios controladores. La manera en que se admiten los controladores de dispositivos es específica del sistema operativo. Por ejemplo, en el sistema operativo Microsoft Windows, los controladores son bibliotecas de vínculos dinámicos (DLL).
ODBC define una gramática SQL estándar. Además de una interfaz de nivel de llamada estándar, ODBC define una gramática SQL estándar. Esta gramática se basa en la especificación CAE de Open Group SQL. Las diferencias entre las dos gramáticas son menores y, principalmente, debido a las diferencias entre la gramática SQL requerida por SQL embebido (Open Group) y una CLI (ODBC). También hay algunas extensiones de la gramática para exponer características de lenguaje disponibles con frecuencia no cubiertas por la gramática de Open Group.
Las aplicaciones pueden enviar instrucciones mediante la gramática específica de ODBC o DBMS. Si una instrucción usa gramática ODBC diferente de la gramática específica de DBMS, el controlador lo convierte antes de enviarlo al origen de datos. Sin embargo, estas conversiones son poco frecuentes porque la mayoría de dbMS ya usan gramática sql estándar.
ODBC proporciona un Administrador de controladores para administrar el acceso simultáneo a varios DBMS. Aunque el uso de controladores resuelve el problema de acceder simultáneamente a varios DBMS, el código para hacerlo puede ser complejo. Las aplicaciones diseñadas para trabajar con todos los controladores no se pueden vincular estáticamente a ningún controlador. En su lugar, deben cargar controladores en tiempo de ejecución y llamar a las funciones en ellos a través de una tabla de punteros a funciones. La situación se vuelve más compleja si la aplicación usa varios controladores simultáneamente.
En lugar de forzar a cada aplicación a hacerlo, ODBC proporciona un Administrador de controladores. El Administrador de controladores implementa todas las funciones ODBC (principalmente como llamadas directas a funciones ODBC en controladores) y está vinculado estáticamente a la aplicación o cargado por la aplicación en tiempo de ejecución. Por lo tanto, la aplicación llama a las funciones ODBC por nombre en el Administrador de controladores, en lugar de por puntero en cada controlador.
Cuando una aplicación necesita un controlador determinado, primero solicita un identificador de conexión con el que identificar el controlador y, a continuación, solicita que el Administrador de controladores cargue el controlador. El Administrador de controladores carga el controlador y almacena la dirección de cada función del controlador. Para llamar a una función ODBC en el controlador, la aplicación llama a esa función en el Administrador de controladores y pasa el identificador de conexión para el controlador. A continuación, el Administrador de controladores llama a la función mediante la dirección que almacenó anteriormente.
ODBC expone un número significativo de características de DBMS, pero no requiere controladores para admitir todos ellos. Si ODBC expone solo características que son comunes a todos los DBMS, sería de poco uso; después de todo, la razón por la que existen tantos DBMS diferentes hoy en día es que tienen características diferentes. Si ODBC expusiera todas las características que están disponibles en cualquier DBMS, sería imposible implementar los controladores.
En su lugar, ODBC expone un número significativo de características ( más de lo que son compatibles con la mayoría de DBMS), pero requiere controladores para implementar solo un subconjunto de esas características. Los controladores implementan las características restantes solo si son compatibles con el DBMS subyacente o si deciden emularlas. Por lo tanto, las aplicaciones se pueden escribir para aprovechar las características de un único DBMS tal como expone el controlador para ese DBMS, para usar solo las características usadas por todos los DBMS, o para comprobar la compatibilidad de una característica determinada y reaccionar en consecuencia.
Para que una aplicación pueda determinar qué características admite un controlador y DBMS, ODBC proporciona dos funciones (SQLGetInfo y SQLGetFunctions) que devuelven información general sobre las funcionalidades del controlador y DBMS y una lista de funciones que admite el controlador. ODBC también define los niveles de conformidad de la API y de la gramática SQL, que especifican una amplia gama de características compatibles con el controlador. Para obtener más información, vea Niveles de conformidad.
Es importante recordar que ODBC define una interfaz común para todas las características que expone. Por este motivo, las aplicaciones contienen código específico de características, no código específico de DBMS y pueden usar los controladores que expongan esas características. Una ventaja de esto es que las aplicaciones no necesitan actualizarse cuando se mejoran las características compatibles con un DBMS; en su lugar, cuando se instala un controlador actualizado, la aplicación usa automáticamente las características porque su código es específico de características, no específico del controlador o específico de DBMS.