使用 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);

只要这些属性设置为其默认值,SQL Server Native Client ODBC 驱动程序即使用 SQL Server 默认结果集。默认结果集可用于 SQL Server 支持的任意 SQL 语句,并且是将整个结果集传输到客户端的最有效的方法。

SQL Server 2005 引入了针对多个活动的结果集 (MARS) 的支持;应用程序现在可以在每个连接上拥有多个活动的默认结果集。默认情况下未启用 MARS。

在 SQL Server 2005 之前,默认结果集不支持同一连接上具有多个活动语句。对连接执行 SQL 语句后,服务器不接受来自该连接上的客户端的命令(取消结果集剩余内容的请求除外),直到结果集中的所有行均处理完毕。若要取消部分处理的结果集的剩余部分,请调用 SQLCloseCursorSQLFreeStmt,同时将 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."

请参阅

概念