Pourquoi ne puis-je pas renvoyer un jeu d'enregistrements à l'aide d'OLEDB dans une procédure stockée ?
J'ai écrit un jour un programme qui fonctionne sur une table temporaire (la fonction principale est de récupérer les 10 premiers enregistrements de chaque catégorie).
La procédure stockée utilise ODBC pour se connecter normalement à la base de données et peut obtenir des résultats corrects. Mais lors de l'utilisation d'oledb pour se connecter, le jeu d'enregistrements ne peut pas être renvoyé, et une fois que l'opération renvoie le jeu d'enregistrements, un message d'erreur apparaît :
Erreur ADODB.Recordset '800a0e78'
L'opération demandée par l'application n'est pas autorisée si l'objet est fermé.
Cela me déroute. pourquoi donc?
En effet, il existe une différence entre OLEDB et ODBC : lorsque ASP obtient le jeu d'enregistrements à partir d'ODBC, ODBC filtre les enregistrements créés par la création de table.
Ou insérer dans génère des jeux d'enregistrements qui occupent uniquement des positions mais ne peuvent effectuer aucune opération. Lorsque ASP obtient le jeu d'enregistrements d'OLEDB, OLEDB ne le fait pas.
Ces jeux d'enregistrements ne sont pas filtrés. Par conséquent, nous devons exécuter set nocount on avant de renvoyer le jeu d’enregistrements dans la procédure stockée.
Il est interdit aux procédures stockées de renvoyer des jeux d'enregistrements ; pour renvoyer des jeux d'enregistrements, set nocount off doit être exécuté en premier. De cette façon, le problème sera résolu.