Tamaño del conjunto de filas del cursor
Los cursores ODBC no están limitados a recopilar una fila cada vez. Pueden recuperar varias filas en cada llamada a SQLFetch o SQLFetchScroll. Cuando se trabaja con una base de datos cliente/servidor, como SQL Server de Microsoft, resulta más eficaz capturar varias filas a la vez. El número de filas devuelto en una búsqueda recibe el nombre de tamaño del conjunto de filas y se especifica mediante SQL_ATTR_ROW_ARRAY_SIZE de SQLSetStmtAttr.
SQLUINTEGER uwRowsize;
SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);
Los cursores con un tamaño del conjunto de filas mayor que 1 reciben el nombre de cursores de bloque.
Hay dos opciones para enlazar las columnas de conjunto de resultados para los cursores de bloque:
Enlace de modo de columna
Cada columna se enlaza a una matriz de variables. Cada matriz tiene el mismo número de elementos que el tamaño del conjunto de filas.
Enlace de modo de fila
Una matriz se genera mediante estructuras que contienen los datos e indicadores para todas las columnas de una fila. La matriz tiene el mismo número de estructuras que el tamaño del conjunto de filas.
Cuando se usa el enlace de modo de columna o de modo de fila, cada llamada a SQLFetch o SQLFetchScroll rellena las matrices enlazadas con datos del conjunto de filas recuperado.
SQLGetData también se puede usar para recuperar los datos de columna de un cursor de bloque. Dado que SQLGetData funciona fila por fila, se debe llamar a SQLSetPos para establecer una fila concreta en el conjunto de filas como la fila actual antes de llamar a SQLGetData.
El controlador ODBC de SQL Server Native Client proporciona una optimización mediante los conjuntos de filas para recuperar rápidamente un conjunto de resultados completo. Para usar esta optimización, establezca los atributos de cursor en sus valores predeterminados (de sólo avance, de sólo lectura, tamaño del conjunto de filas = 1) en el momento en que se realiza la llamada a SQLExecDirect o SQLExecute. El controlador ODBC de SQL Server Native Client configura un conjunto de resultados predeterminado. Esto es más eficaz que los cursores de servidor al transferir los resultados al cliente sin desplazarse. Después de ejecutar la instrucción, aumente el tamaño del conjunto de filas y use el enlace de modo de columna o de modo de fila. Esto permite que SQL Server pueda usar un conjunto de resultados predeterminado para enviar de forma eficaz las filas de resultados al cliente, mientras el controlador ODBC de SQL Server Native Client extrae continuamente filas de los búferes de red del cliente.