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.

È stato utile?

Soluzione

credo che si chiuderà, ma non fino a quando il garbage collector ci si aggira attorno, cosa che potrebbe non durare a lungo ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top