使用 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 语句后,服务器不会接受来自该连接的客户端的命令(除了取消结果集的其余部分的请求),直到处理结果集中的所有行。 若要取消部分处理的结果集的其余部分,请使用 fOption 参数设置为SQL_CLOSE调用 SQLCloseCursorSQLFreeStmt。 若要完成部分处理的结果集并测试是否存在另一个结果集,请调用 SQLMoreResults。 如果在完全处理默认结果集之前,ODBC 应用程序尝试对连接句柄执行命令,则调用将生成SQL_ERROR,并返回 对 SQLGetDiagRec 的 调用:

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

另请参阅

如何实现游标