Использование результирующих наборов по умолчанию в SQL Server
Атрибутами курсора ODBC по умолчанию являются:
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);
Всякий раз, когда эти атрибуты имеют значения по умолчанию, драйвер собственного клиента ODBC SQL Server использует результирующий набор SQL Server по умолчанию. Результирующие наборы по умолчанию могут использоваться для любой инструкции SQL, поддерживаемой SQL Server, и являются самым эффективным методом передачи всего результирующего набора клиенту.
В версии SQL Server 2005 была реализована поддержка режима MARS; теперь приложения могут иметь более одного активного результирующего набора в расчете на соединение. По умолчанию режим MARS не включен.
До выхода версии SQL Server 2005 принимаемые по умолчанию результирующие наборы не поддерживали несколько активных инструкций для одного соединения. После выполнения инструкции SQL на соединении сервер не принимает команд от клиента на этом соединении до тех пор, пока не будут обработаны все строки результирующего набора. Исключение составляют запросы на отмену оставшейся части результирующего набора. Для отмены оставшейся части частично обработанного результирующего набора нужно вызвать функцию SQLCloseCursor или SQLFreeStmt; при этом параметр fOption должен иметь значение SQL_CLOSE. Чтобы завершить работу с частично обработанным результирующим набором и проверить, существует ли другой результирующий набор, нужно вызвать функцию SQLMoreResults. Если приложение ODBC пытается передать команду дескриптору соединения еще до полного завершения обработки результирующего набора по умолчанию, вызов генерирует сообщение SQL_ERROR, а вызов функции SQLGetDiagRec возвращает:
szSqlState: "HY000", pfNativeError: 0szErrorMsg: "[Microsoft][SQL Server Native Client] Connection is busy with results for another hstmt."