Question

Je nettoie les DataReaders dans un ancien projet .NET 1.1 dont j'ai hérité.

Le développeur précédent a codé la couche d'accès aux données de manière à ce que la plupart des méthodes DAL retournent SqlDataReaders (laissant ainsi à l'appelant le soin d'appeler correctement les méthodes .Close () ou .Dispose ()).

J'ai rencontré un problème, cependant, dans lequel un appelant ne récupère pas le SqlDataReader renvoyé (et ne l'élimine donc pas correctement). Voir le code ci-dessous:

Méthode d'accès aux données:

Public Shared Function UpdateData() As SqlDataReader
   ...

   drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)

   Return drSQL

End Function

Code d'appel:

...
DataAccessLayer.UpdateData()
...

Comme vous pouvez le constater, la méthode d’appel ne reçoit / n’attrape pas le SqlDataReader renvoyé. Alors qu'est-ce qui se passe? Est-ce que SqlDataReader est toujours là et ouvert? Ou est-ce que les ordures sont automatiquement ramassées puisque rien ne les résout?

Je ne pouvais pas penser à un moyen de déboguer et de tester cela. Si quelqu'un a des idées ou des suggestions, ce serait formidable.

Était-ce utile?

La solution

Je pense qu'il sera fermé, mais pas avant que le ramasse-miettes ne s'en rende compte, ce qui risque de ne pas durer très longtemps ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top