Cursores de bloque

Muchas aplicaciones necesitan una cantidad significativa de tiempo para traer datos a través de la red. Una parte de este tiempo se dedica realmente a traer los datos a través de la red y otra parte se invierte en la sobrecarga de red, como la llamada realizada por el controlador para solicitar una fila de datos. Esta última parte se puede reducir si la aplicación hace un uso eficaz de los cursores de bloque o gruesos, que pueden devolver más de una fila a la vez.

Una aplicación siempre tiene la opción de usar un cursor de bloque. En los orígenes de datos desde los que solo se puede capturar una fila a la vez, los cursores de bloque deben simularse en el controlador. Para ello, realice varias capturas de una sola fila. Aunque es poco probable que esto proporcione mejoras de rendimiento, abre oportunidades para las aplicaciones. A continuación, estas aplicaciones experimentarán aumentos de rendimiento a medida que los DBMS implementen cursores de bloque de forma nativa y los controladores asociados a esos DBMS los expongan.

Las filas devueltas en una sola captura con un cursor de bloque se denominan conjunto de filas. Es importante no confundir el conjunto de filas con el conjunto de resultados. El conjunto de resultados se mantiene en el origen de datos, mientras que el conjunto de filas se mantiene en los búferes de la aplicación. Aunque el conjunto de resultados es fijo, el conjunto de filas no; cambia de posición y contenido cada vez que se captura un nuevo conjunto de filas. Al igual que un cursor de una sola fila, como el cursor tradicional de solo avance de SQL, apunta a una fila actual, un cursor de bloque apunta al conjunto de filas, que se puede considerar como las filas actuales.

Para realizar operaciones que operan en una sola fila cuando se han capturado varias filas, la aplicación debe indicar primero qué fila es la actual. La fila actual es necesaria para las llamadas a SQLGetData y las instrucciones de eliminación y actualización posicionadas. Cuando un cursor de bloque devuelve primero un conjunto de filas, la fila actual es la primera del conjunto de filas. Para cambiar la fila actual, la aplicación llama a SQLSetPos o SQLBulkOperations (para actualizar por marcador). En la ilustración siguiente se muestra la relación del conjunto de resultados, el conjunto de filas, la fila actual, el cursor del conjunto de filas y el cursor de bloque. Para obtener más información, consulte Uso de cursores de bloque, más adelante en esta sección, e Instrucciones de eliminación y actualización posicionadas y Actualización de datos con SQLSetPos.

Fetching Next, Prior, First, and Last Rowsets

El hecho de que un cursor sea un cursor de bloque no depende de si se puede desplazar. Por ejemplo, la mayoría del trabajo de una aplicación de informe se dedica a recuperar e imprimir filas. Debido a esto, funcionará más rápido con un cursor de bloque de solo avance. Usa un cursor de solo avance para evitar el gasto de un cursor desplazable y un cursor de bloque para reducir el tráfico de red.

Esta sección contiene los temas siguientes.