Compartir a través de


Teniendo en cuenta las características de base de datos que se utilizan

Una vez que se conoce 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? ¿Usará la aplicación cursores desplazables? ¿Transacciones? ¿Procedimientos? ¿Datos de tipo long? Para obtener ideas sobre las características que podrían no ser compatibles con todos los DBMS, consulte las descripciones de las funciones SQLGetInfo, SQLSetConnectAttr y SQLSetStmtAttr y el 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 podrían mostrar que la aplicación puede dirigirse fácilmente a muchos DBMS.

Por ejemplo, si las características requeridas 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 requeridas son más complejas —como cursores desplazables, instrucciones de actualización posicionada y eliminación y procedimientos—, a menudo será necesario hacer algunas concesiones. Hay varias posibilidades:

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

  • Mayor interoperabilidad, menos características. La aplicación abandona 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 aquellos DBMS que las admitan.

  • Mayor interoperabilidad, más características. La aplicación usa las características con DBMS que las admiten y las 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 bien con ninguno. Por otro lado, los dos últimos casos son más complejos. En ambos casos es necesario comprobar si el 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.

Piense en 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. Ahora supongamos que esta aplicación tiene una característica que permite a los usuarios mostrar los resultados de varias consultas de manera simultánea. Es decir, pueden ejecutar una consulta y examinar algunos de los resultados, ejecutar otra consulta y examinar algunos de los resultados y, a continuación, volver a la primera consulta. Esto presenta un problema de interoperabilidad, ya que algunos controladores solo admiten una única instrucción de acción.

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:

  • Admitir siempre varias consultas. Después de conectarse a un controlador, la aplicación comprueba el número de instrucciones de acción. Si el controlador admite solo una instrucción de acción, 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 una menor interoperabilidad.

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

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

  • Admitir siempre varias consultas y emularlas cuando sea necesario. Después de conectarse a un controlador, la aplicación comprueba el número de instrucciones de acción. 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 de acción, la aplicación establece una conexión adicional con 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.