Utilizzo dei set di risultati predefiniti di SQL Server
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
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 usa un set di risultati predefinito di SQL Server. I set di risultati predefiniti possono essere usati per qualsiasi istruzione SQL supportata da SQL Server e sono il metodo più efficiente per trasferire un intero set di risultati al client.
SQL Server 2005 (9.x) ha introdotto il supporto per più set di risultati attivi (MARS); le applicazioni possono ora avere più di un set di risultati predefinito attivo per ogni connessione. Per impostazione predefinita, la funzionalità MARS non è abilitata.
Prima di SQL Server 2005 (9.x), 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 (ad eccezione di una richiesta di annullare il resto del set di risultati) dal client in tale connessione fino a quando non vengono elaborate tutte le righe 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 un comando su un handle di connessione prima che un set di risultati predefinito sia stato completamente elaborato, la chiamata genera 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."