Utilizzo dei set di risultati predefiniti di SQL Server

Gli attributi predefiniti del cursore ODBC sono:

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

Ogni volta che questi attributi vengono impostati sui valori predefiniti, il driver ODBC di SQL Server Native Client utilizza un set di risultati predefinito di SQL Server. I set di risultati predefiniti possono essere utilizzati per qualsiasi istruzione SQL supportata da SQL Server e rappresentano il metodo più efficiente per trasferire un intero set di risultati al client.

In SQL Server 2005 è stato introdotto il supporto della funzionalità MARS (Multiple Active Result Set). Le applicazioni possono avere ora più set di risultati predefiniti attivi per connessione. Per impostazione predefinita, la funzionalità MARS non è abilitata.

Prima di SQL Server 2005, i set di risultati predefiniti non supportavano più istruzioni attive nella stessa connessione. Dopo l'esecuzione di un'istruzione SQL in una connessione, il server non accetta comandi dal client in tale connessione finché non sono state elaborate tutte le righe del set di risultati, ad eccezione di una richiesta per annullare il resto del set di risultati. Per annullare il resto di un set di risultati parzialmente elaborato, chiamare SQLCloseCursor o SQLFreeStmt con il parametro fOption impostato su SQL_CLOSE. Per completare un set di risultati parzialmente elaborato e verificare la presenza di un altro set di risultati, chiamare SQLMoreResults. Se un'applicazione ODBC tenta di eseguire un comando su un handle di connessione prima del completamento dell'elaborazione di un set di risultati predefinito, la chiamata genera un errore SQL_ERROR e viene restituita una chiamata a SQLGetDiagRec:

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