Comparteix via


Considerar las características de la base de datos que se van a usar

Una vez conocido el nivel básico de interoperabilidad, se deben tener en cuenta las características de base de datos usadas por la aplicación. Por ejemplo, ¿qué instrucciones SQL ejecutará la aplicación? ¿La aplicación usará cursores desplazables? ¿Transacciones? ¿Procedimientos? ¿Datos extensos? Para obtener ideas sobre las características que podrían no ser compatibles con todos los DBMS, vea las descripciones de la función SQLGetInfo, SQLSetConnectAttr y SQLSetStmtAttr y apéndice C: Gramática de SQL. Las características requeridas por una aplicación podrían eliminar algunos DBMS de la lista de DBMS de destino. También pueden mostrar que la aplicación puede dirigirse fácilmente a muchos DBMS.

Por ejemplo, si las características necesarias son sencillas, normalmente se pueden implementar con un alto grado de interoperabilidad. Es probable que una aplicación que ejecute una instrucción SELECT simple y recupere los resultados con un cursor de solo avance sea altamente interoperable en virtud de su simplicidad: casi todos los controladores y DBMS admiten la funcionalidad que necesita.

Sin embargo, si las características necesarias son más complejas, como cursores desplazables, sentencias de actualización y eliminación posicionales, y procedimientos, a menudo deben hacerse concesiones. Hay varias posibilidades:

  • Menor interoperabilidad, más características. La aplicación incluye las características, pero solo funciona con DBMS que los admiten.

  • Mayor interoperabilidad, menos características. La aplicación quita las características, pero funciona con más DBMS.

  • Mayor interoperabilidad, características opcionales. La aplicación incluye las características, pero las pone a disposición solo con los DBMS que los admiten.

  • Mayor interoperabilidad, más características. La aplicación usa las características con DBMS que los admiten y los emula para DBMS que no lo hacen.

Los dos primeros casos son relativamente sencillos de implementar, ya que las características se usan con todos los DBMS compatibles o con ninguno. Los dos últimos casos, por otro lado, son más complejos. En ambos casos es necesario comprobar si DBMS admite las características y, en el último caso, escribir una cantidad potencialmente grande de código para emular estas características. Por lo tanto, es probable que estos esquemas requieran más tiempo de desarrollo y pueden ser más lentos en tiempo de ejecución.

Considere una aplicación de consulta genérica que pueda conectarse a un único origen de datos. La aplicación acepta una consulta del usuario y muestra los resultados en una ventana. Supongamos que esta aplicación tiene una característica que permite a los usuarios mostrar los resultados de varias consultas simultáneamente. Es decir, pueden ejecutar una consulta y examinar algunos de los resultados, ejecutar una consulta diferente y examinar algunos de sus resultados y, a continuación, volver a la primera consulta. Esto presenta un problema de interoperabilidad porque algunos controladores solo admiten una única instrucción activa.

La aplicación tiene varias opciones, en función de lo que devuelve el controlador para la opción SQL_MAX_CONCURRENT_ACTIVITIES en SQLGetInfo:

  • Asegúrate de soportar múltiples consultas. Después de conectarse a un controlador, la aplicación comprueba el número de instrucciones activas. Si el controlador solo admite una instrucción activa, la aplicación cierra la conexión e informa al usuario de que el controlador no admite la funcionalidad necesaria. La aplicación es fácil de implementar y tiene una funcionalidad completa, pero tiene una menor interoperabilidad.

  • No admitas varias consultas. La aplicación quita por completo la característica. Es fácil de implementar y tiene una alta interoperabilidad, pero tiene menos funcionalidad.

  • Admite varias consultas solo si el controlador lo hace. Después de conectarse a un controlador, la aplicación comprueba el número de instrucciones activas. La aplicación permite al usuario iniciar una nueva instrucción cuando ya está activa solo si el controlador admite varias instrucciones activas. La aplicación tiene una mayor funcionalidad e interoperabilidad, pero es más difícil de implementar.

  • Admite siempre varias consultas y emúlalas cuando sea necesario. Después de conectarse a un controlador, la aplicación comprueba el número de instrucciones activas. La aplicación siempre permite al usuario iniciar una nueva instrucción cuando ya hay una activa. Si el controlador solo admite una instrucción activa, la aplicación abre una conexión adicional a ese controlador y ejecuta la nueva instrucción en esa conexión. La aplicación tiene una funcionalidad completa y una alta interoperabilidad, pero es más difícil de implementar.