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


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

См. также

Реализация курсоров