Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

opération non autorisée lorsque l'objet est fermé lors de l'exécution d'une requête plus avancée

Il s'agit d'un problème courant causé par le nombre de lignes interprété comme la sortie d'une procédure stockée lors de l'utilisation de ADODB avec SQL Server.

Pour éviter cela, n'oubliez pas de définir

SET NOCOUNT ON;

dans votre procédure stockée, cela empêchera ADODB de renvoyer un jeu d'enregistrements fermé, ou si pour une raison quelconque vous ne voulez pas le faire (vous ne savez pas pourquoi car vous pouvez toujours utiliser @@ROWCOUNT pour repasser le décompte de lignes), vous pouvez utiliser

'Return the next recordset, which will be the result of the Stored Procedure, not 
'the row count generated when SET NOCOUNT OFF (default).
Set rs = rs.NextRecordset()

qui renvoie le prochain ADODB.Recordset si ADODB en a détecté un renvoyé par la procédure stockée (il serait peut-être préférable de vérifier rs.State <> adStateClosed lorsqu'il s'agit de plusieurs objets ADODB.Recordset).