Compartir a través de


Cursores de sólo avance rápido (ODBC)

Cuando está conectado a una instancia de SQL Server, el controlador ODBC de SQL Server Native Client admite optimizaciones de rendimiento de los cursores de sólo avance rápido y sólo lectura. Los cursores de sólo avance rápido se implementan internamente mediante el controlador y el servidor de un modo muy similar a los conjuntos de resultados predeterminados. Además de presentar un alto rendimiento, los cursores de sólo avance rápido también presentan estas características:

  • No se admite SQLGetData. Las columnas del conjunto de resultados deben estar enlazadas a variables de programa.

  • El servidor cierra automáticamente el cursor cuando se detecta el final del cursor. La aplicación debe seguir llamando a SQLCloseCursor o SQLFreeStmt(SQL_CLOSE), pero el controlador no tiene que enviar la solicitud de cierre al servidor. De esta forma, se ahorra un viaje de ida y vuelta (round trip) de la red al servidor.

La aplicación solicita cursores de sólo avance rápido mediante el atributo de instrucciones específico del controlador SQL_SOPT_SS_CURSOR_OPTIONS. Cuando se establece en SQL_CO_FFO, los cursores de sólo avance rápido se habilitan sin recopilación automática. Cuando se establece en SQL_CO_FFO_AF, también se habilita la opción de recopilación automática. Para obtener más información sobre de recopilación automática, vea Utilizar la recopilación automática con cursores ODBC.

Los cursores de sólo avance rápido con recopilación automática pueden usarse para recuperar un pequeño conjunto de resultados con sólo un viaje de ida y vuelta (round trip) al servidor. En estos pasos, n es el número de filas que va a devolverse:

  1. Establezca SQL_SOPT_SS_CURSOR_OPTIONS en SQL_CO_FFO_AF.

  2. Establezca SQL_ATTR_ROW_ARRAY_SIZE en n + 1.

  3. Enlace las columnas de resultados a matrices de n + 1 elementos (para asegurarse de que realmente se recuperen n + 1 filas).

  4. Abra el cursor con SQLExecDirect o SQLExecute.

  5. Si el estado de retorno es SQL_SUCCESS, llame a SQLFreeStmt o SQLCloseCursor para cerrar el cursor. Todos los datos de las filas estarán en las variables de programa enlazadas.

Con estos pasos, SQLExecDirect o SQLExecute envía una solicitud de apertura del cursor con la opción de recopilación automática habilitada. En esa única solicitud del cliente, el servidor:

  • Abre el cursor.

  • Genera el conjunto de resultados y envía las filas al cliente.

  • Dado que el tamaño del conjunto de filas se estableció en 1 más el número de filas del conjunto de resultados, el servidor detecta el final del cursor y cierra el cursor.