Frage

Ich habe den Verdacht hat, dass eine Datenbankverbindung in einem unsere Anwendungen verwendet wird, nicht immer geschlossen. Ich ging um den Code zu sehen, und ich habe eine Klasse DataProvider gefunden Objekt SqlConnection hat. Die Verbindung wird im Konstruktor dieser Klasse geöffnet und geschlossen, es ist Dispose Methode (tu das nicht beurteilen, ich weiß halte eine offene Verbindung schlecht ist, es ist einfach nicht mein Code und es ist nicht der Punkt, der die Frage sowieso). Die Dispose Verfahren wird wie folgt durchgeführt:

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

        _disposed = true;
    }
}

Die Frage ist:
Ist es garantiert immer, dass die Verbindung geschlossen ist?
Ist dieser Code richtig?

ich denke, es sollte aufgerufen _conn.Dispose() werden - bin ich richtig und konnte es nicht das Schließen der Verbindung (wahrscheinlich nicht) beeinflussen

War es hilfreich?

Lösung

Entsorgen Sie niemals automatisch aufgerufen.

Die Verbindung wird erst geschlossen, wenn die Dispose-Methode des Objekts explizit genannt wird, oder wenn Sie Ihre Klasse in in einem mit () Block verwendet

Ein sicherer Weg, um die dispose-Methode in Ihrem Finalizer aufrufen und sorgen für die Finalizerthread unterdrückt wird, wenn die Dispose-Methode aufgerufen wird.

dieser Artikel die richtige Art und Weise präsentieren, das Muster zu implementieren

Hoffe, es hilft!

Cédric

Andere Tipps

conn.Dispose(); wird auch die Verbindung schließen, so verletzen kann es nicht die Änderung der dispose Muster zu folgen.

Aber es funktionell äquivalenten so muss es ein Problem sein, sonst wo.

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

  

Wenn die SqlConnection geht aus   Umfang, es wird nicht geschlossen werden. Deshalb,   Sie müssen das explizit schließen   Verbindung durch den Aufruf von Close oder   Entsorgen. Schließen und Entsorgen sind   funktionell äquivalent. wenn die   Verbindungspooling Wert Pooling ist   auf true gesetzt oder ja, die zugrunde liegenden   Anschluss an die zurück zurück   Verbindungspool. Auf der anderen Seite, wenn   Pooling auf false gesetzt ist oder nicht, die   zugrundeliegende Verbindung zum Server   geschlossen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top