Ist eine Datenbankverbindung in Dispose-Methode zu schließen ist richtig?
-
06-07-2019 - |
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
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.