Share via


Biblioteca de cursores ODBC

Algunos controladores ODBC sólo admiten los valores de cursor predeterminados; estos controladores tampoco admiten las operaciones de cursor posicionadas, como SQLSetPos. La biblioteca de cursores ODBC es un componente de Microsoft Data Access Components (MDAC) que se utiliza para implementar cursores de bloque o estáticos en un controlador que normalmente no los admite. La biblioteca de cursores también implementa instrucciones UPDATE y DELETE posicionadas así como SQLSetPos en los cursores que crea.

La biblioteca de cursores ODBC se implementa como un nivel entre el Administrador de controladores ODBC y un controlador ODBC. Si se carga la biblioteca de cursores ODBC, el Administrador de controladores ODBC enruta todos los comandos relacionados con cursor a la biblioteca de cursores en lugar del controlador. Para implementar un cursor, la biblioteca de cursores implementa un cursor captura el conjunto completo de resultados del controlador subyacente y lo almacena en la caché del cliente. Al utilizar la biblioteca de cursores ODBC, la aplicación se limita a la funcionalidad del cursor de la biblioteca de cursores; la aplicación no dispone de compatibilidad con funcionalidad adicional del cursor incluida en el controlador subyacente.

No hay gran necesidad de utilizar la biblioteca de cursores ODBC con el controlador ODBC de SQL Server Native Client, ya que el propio controlador admite más funcionalidad de cursor que la biblioteca de cursores ODBC. La única razón para utilizar la biblioteca de cursores ODBC con el controlador ODBC de SQL Server Native Client es que el controlador implementa su compatibilidad con los cursores a través de cursores de servidor y éstos no admiten todas las instrucciones SQL. Considere la posibilidad de utilizar la biblioteca de cursores ODBC siempre que necesite disponer de un cursor estático con procedimientos almacenados, lotes o instrucciones SQL que contengan COMPUTE, COMPUTE BY, FOR BROWSE o INTO. Sin embargo, debe prestar atención si utiliza la biblioteca de cursores, ya que almacena en la memoria caché del cliente el conjunto de resultados completo, lo que puede consumir grandes cantidades de memoria y reducir el rendimiento.

Una aplicación invoca la biblioteca de cursores conexión por conexión utilizando SQLSetConnectAttr para establecer el atributo de conexión SQL_ATTR_ODBC_CURSORS antes de conectar a un origen de datos. SQL_ATTR_ODBC_CURSORS se establece en uno de tres valores:

  • SQL_CUR_USE_ODBC
    Al establecer esta opción con el controlador ODBC de SQL Server Native Client, la biblioteca de cursores ODBC invalida la compatibilidad de cursores nativa del controlador ODBC de SQL Server Native Client. En la conexión sólo se pueden utilizar los tipos de cursor que admite la biblioteca de cursores; no se pueden utilizar cursores de servidor.

  • SQL_CUR_USE_DRIVER
    Al establecer esta opción, en la conexión se puede utilizar toda la compatibilidad de cursores nativa del controlador ODBC de SQL Server Native Client. No se puede inicializar la biblioteca de cursores ODBC. Todos los cursores se implementan como cursores de servidor.

  • SQL_CUR_USE_IF_NEEDED
    Al establecer esta opción, el efecto es el mismo que al utilizar SQL_CUR_USE_DRIVER cuando se usa con el controlador ODBC de SQL Server Native Client. En el tiempo de conexión, el Administrador de controladores ODBC realiza una prueba para ver si el controlador ODBC al que se conecta admite la opción SQL_FETCH_PRIOR de SQLFetchScroll. Si el controlador no admite la opción, el Administrador de controladores ODBC carga la biblioteca de cursores ODBC. Si el controlador admite la opción, el Administrador de controladores ODBC no carga la biblioteca de cursores ODBC y la aplicación utiliza la compatibilidad nativa del controlador. Dado que el controlador ODBC de SQL Server Native Cliente admite SQL_FETCH_PRIOR, el Administrador de controladores ODBC no carga la biblioteca de cursores ODBC.

La biblioteca de cursores permite a las aplicaciones utilizar varias instrucciones activas en una conexión, así como cursores desplazables y actualizables. La biblioteca de cursores debe estar cargada para admitir esta funcionalidad. Utilice SQLSetConnectAttr para especificar cómo se debería utilizar la biblioteca de cursores y SQLSetStmtAttr para especificar el tipo de cursor, la simultaneidad y el tamaño del conjunto de filas.