Utilisation de jeux de résultats SQL Server par défaut

Les attributs de curseur ODBC par défaut sont les suivants :

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

Dès lors que ces attributs sont définis sur leurs valeurs par défaut, le pilote ODBC SQL Server Native Client utilise un jeu de résultats SQL Server par défaut. Les jeux de résultats par défaut peuvent être utilisés pour toute instruction SQL prise en charge par SQL Server et s'avèrent la méthode de transfert la plus efficace d'un jeu de résultats entier au client.

La prise en charge de MARS (Multiple Active Results Sets) a été introduite pour la première fois dans SQL Server 2005. Les applications peuvent désormais avoir plusieurs jeux de résultats par défaut actifs par connexion. MARS n'est pas activé par défaut.

Avant SQL Server 2005, les jeux de résultats par défaut ne prenaient pas en charge plusieurs instructions actives sur la même connexion. Une fois qu'une instruction SQL était exécutée sur une connexion, le serveur n'acceptait pas de commandes (sauf une demande d'annulation du reste du jeu de résultats) du client sur cette connexion tant que toutes les lignes du jeu de résultats n'avaient pas été traitées. Pour annuler le reste d'un jeu de résultats partiellement traité, appelez SQLCloseCursor ou SQLFreeStmt en définissant le paramètre fOption sur SQL_CLOSE. Pour terminer un jeu de résultats partiellement traité et tester la présence d'un autre jeu de résultats, appelez SQLMoreResults. Si une application ODBC tente une commande sur un handle de connexion avant qu'un jeu de résultats par défaut ne soit complètement traité, l'appel génère SQL_ERROR et un appel à SQLGetDiagRec retourne :

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

Voir aussi

Concepts

Comment les curseurs sont implémentés