Pregunta

Estoy limpiando los DataReaders en un antiguo proyecto .NET 1.1 que heredé.

El desarrollador anterior codificó la capa de acceso a datos de tal manera que la mayoría de los métodos de DAL devolvieron SqlDataReaders (por lo tanto, le corresponde al llamador llamar correctamente a los métodos .Close () o .Dispose ()).

Sin embargo, me he encontrado con una situación en la que una persona que llama no está detectando el SqlDataReader devuelto (y, por lo tanto, no lo está eliminando correctamente). Vea el código a continuación:

Método de acceso a datos:

Public Shared Function UpdateData() As SqlDataReader
   ...

   drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)

   Return drSQL

End Function

Código de llamada:

...
DataAccessLayer.UpdateData()
...

Como puede ver, el método de llamada no recibe / captura el SqlDataReader devuelto. ¿Así que lo que sucede? ¿Es ese SqlDataReader todavía por ahí y abierto? ¿O es que automáticamente se recolecta la basura ya que nada lo está abordando?

No se me ocurrió una manera de depurar y probar esto. Si alguien tiene alguna idea o sugerencia que sería genial.

¿Fue útil?

Solución

Creo que se cerrará, pero no hasta que el recolector de basura lo consiga, lo que puede que no sea por mucho tiempo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top