Compartir a través de


Utilizar conjuntos de resultados predeterminados de SQL Server

Los atributos de cursor ODBC predeterminados son:

SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);

Siempre que estos atributos están establecidos en sus valores predeterminados, el controlador ODBC de SQL Server Native Client utiliza un conjunto de resultados predeterminado de SQL Server. Los conjuntos de resultados predeterminados se pueden utilizar para cualquier instrucción SQL admitida por SQL Server y son el método más eficaz de transferir un conjunto de resultados completo al cliente.

SQL Server 2005 presentó la compatibilidad para varios conjuntos de resultados activos (MARS); las aplicaciones pueden tener ahora más de un conjunto de resultados predeterminado activo por conexión. MARS no está habilitado de forma predeterminada.

Antes de SQL Server 2005, los conjuntos de resultados predeterminados no admitían varias instrucciones activas en la misma conexión. Una vez ejecutada una instrucción SQL en una conexión, el servidor no acepta comandos (excepto una solicitud para cancelar el resto del conjunto de resultados) del cliente en esa conexión hasta que se han procesado todas las filas del conjunto de resultados. Para cancelar el resto de un conjunto de resultados procesado parcialmente, llame a SQLCloseCursor o SQLFreeStmt con el parámetro fOption establecido en SQL_CLOSE. Para finalizar un conjunto de resultados procesado parcialmente y comprobar la presencia de otro conjunto de resultados, llame a SQLMoreResults. Si una aplicación ODBC intenta ejecutar un comando en un identificador de conexión antes de que un conjunto de resultados predeterminado haya sido completamente procesado, la llamada genera SQL_ERROR y una llamada a de SQLGetDiagRec devuelve:

szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
                Connection is busy with results for another hstmt."

Vea también

Conceptos

Cómo se implementan los cursores