Поделиться через


Использование результирующих наборов по умолчанию в 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 Native Client использует 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: 0  
szErrorMsg: "[Microsoft][SQL Server Native Client]  
                Connection is busy with results for another hstmt."  

См. также:

Способы реализации курсоров