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

Contraintes de mémoire SQL Server et .NET, allocations et récupération de place

Le problème est que, pour une raison quelconque, votre DataReader n'est pas fermé. Une exception? L'utilisateur de la méthode ne s'est pas souvenu de fermer le DataReader ?

Une fonction qui renvoie un DataReader à utiliser en dehors de son corps laisse la responsabilité de le fermer au code externe, il n'y a donc aucune garantie que le Reader sera fermé. Si vous ne fermez pas le lecteur, vous ne pouvez pas réutiliser la connexion dans laquelle il a été ouvert.

Donc renvoyer un DataReader à partir d'une fonction est une très mauvaise idée !

Vous pouvez voir toute une discussion sur ce sujet ici .

Recherchez les usages de cette fonction (GetDataReader ), et vérifiez s'il y a une garantie que le lecteur se ferme. Et, plus important encore, qu'il n'y a aucune possibilité que ce code entre à nouveau et utilise la même collection pour ouvrir un nouveau DataReader avant que le premier ne soit fermé. (Ne vous laissez pas induire en erreur par le CommandBehavior.CloseConnection. Cela ne s'occupe que de fermer la connexion lorsque le DataReader est fermé... seulement si vous n'échouez pas à le fermer)