Usando conjuntos de resultados padrão do SQL Server
Os atributos padrão de cursor do ODBC são:
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);
Sempre que esses atributos são definidos como padrões, o driver ODBC SQL Server Native Client usa um SQL Server conjunto de resultados padrão. Os conjuntos de resultados padrão podem ser usados para qualquer instrução SQL compatível com SQL Server e são o método mais eficiente de transferir um conjunto de resultados inteiro para o cliente.
SQL Server 2005 introduziu suporte para mars (conjuntos de resultados ativos múltiplos); os aplicativos agora podem ter mais de um conjunto de resultados padrão ativo por conexão. O MARS não está habilitado por padrão.
Antes SQL Server 2005, os conjuntos de resultados padrão não davam suporte a várias instruções ativas na mesma conexão. Depois que uma instrução SQL é executada em uma conexão, o servidor não aceita comandos (exceto uma solicitação para cancelar o restante do conjunto de resultados) do cliente nessa conexão até que todas as linhas do conjunto de resultados sejam processadas. Para cancelar o restante de um conjunto de resultados parcialmente processado, chame SQLCloseCursor ou SQLFreeStmt com o parâmetro fOption definido como SQL_CLOSE. Para concluir um conjunto de resultados parcialmente processado e testar a presença de outro conjunto de resultados, chame SQLMoreResults. Se um aplicativo ODBC tentar um comando em um identificador de conexão antes que um conjunto de resultados padrão seja completamente processado, a chamada gerará SQL_ERROR e uma chamada para SQLGetDiagRec retornará:
szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
Connection is busy with results for another hstmt."