SqlDataReader: in questo scenario, il lettore verrà chiuso?
-
05-07-2019 - |
Domanda
Sto ripulendo i DataReader in un vecchio progetto .NET 1.1 che ho ereditato.
Lo sviluppatore precedente ha codificato il livello di accesso ai dati in modo tale che la maggior parte dei metodi DAL restituisse SqlDataReaders (lasciando quindi al chiamante la chiamata corretta dei metodi .Close () o .Dispose ()).
Tuttavia, mi sono imbattuto in una situazione in cui un chiamante non sta rilevando SqlDataReader restituito (e quindi non lo sta eliminando correttamente). Vedi il codice qui sotto:
Metodo di accesso ai dati:
Public Shared Function UpdateData() As SqlDataReader
...
drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)
Return drSQL
End Function
Codice chiamante:
...
DataAccessLayer.UpdateData()
...
Come puoi vedere, il metodo chiamante non riceve / cattura SqlDataReader restituito. Quindi cosa succede? Quel SqlDataReader è ancora là fuori e aperto? O viene automaticamente raccolta dei rifiuti poiché nulla li sta affrontando?
Non riuscivo a pensare a un modo per eseguire il debug e testarlo. Se qualcuno ha qualche idea o suggerimento sarebbe fantastico.
Soluzione
credo che si chiuderà, ma non fino a quando il garbage collector ci si aggira attorno, cosa che potrebbe non durare a lungo ...