Domanda

Ho avuto il sospetto che una connessione al database utilizzata in una delle nostre applicazioni non fosse sempre chiusa. Sono andato a vedere il codice e ho trovato un DataProvider di classe con l'oggetto SqlConnection . La connessione è aperta nel costruttore di questa classe e chiusa nel suo metodo Dispose (non giudicarlo, so che mantenere una connessione aperta è male, non è solo il mio codice e non è il punto di la domanda comunque). Il metodo Dispose è implementato in questo modo:

protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            if (_conn != null)
                _conn.Close();
        }

        _disposed = true;
    }
}

La domanda è:
Garantisce sempre che la connessione sia chiusa?
Questo codice è giusto?

Penso che dovrebbe essere chiamato _conn.Dispose () - ho ragione e potrebbe influire sul fatto di non chiudere la connessione (probabilmente no)?

È stato utile?

Soluzione

Dispose non viene mai chiamato automaticamente.

La connessione non verrà chiusa fino a quando non viene esplicitamente chiamato il metodo Dispose dell'oggetto o se la classe viene utilizzata in un blocco using ()

Un modo più sicuro consiste nel chiamare il metodo dispose nel finalizzatore e assicurarsi che il finalizzatore venga eliminato quando viene chiamato il metodo Dispose.

Questo articolo presenta il modo corretto di implementare il modello

Spero che sia d'aiuto!

C & # 233; dric

Altri suggerimenti

conn.Dispose (); chiuderà anche la connessione, quindi non puoi fare a meno di cambiarla per seguire il modello di disposizione.

Ma funzionalmente equivalente quindi ci deve essere un altro problema dove.

http://msdn.microsoft .com / it-it / library / system.data.sqlclient.sqlconnection.close.aspx

  

Se SqlConnection si spegne   ambito, non sarà chiuso. Perciò,   è necessario chiudere esplicitamente il file   connessione chiamando Chiudi o   Dispose. Chiudi e smaltisci   funzionalmente equivalente. Se la   valore del pool di connessioni Il pooling è   impostato su vero o sì, il sottostante   la connessione viene restituita al   pool di connessioni. D'altra parte, se   Il pooling è impostato su false o no, il   la connessione sottostante al server è   chiuso.

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