2010-09-28 11 views
9

Ich habe eine Anwendung, die SqlConnection.ClearAllPools verwendet, um alle Verbindungen vor dem Löschen einer Datenbank zu schließen.SqlConnection.ClearAllPools, was ist deaktiviert?

Es gibt einen Fall, in dem eine Verbindung noch besteht. Diese Verbindung wurde in einer anderen Anwendungsdomäne erstellt.

Also frage ich mich, welche Verbindungen von SqlConnection.ClearAllPools geschlossen sind?

  • Nur die vom aufrufenden Prozess (oder AppDomain) geöffneten Verbindungen?
  • Alle von diesem Gerät geöffneten Verbindungen?
  • ...?

Antwort

9

Es schließt alle Verbindungen, die nur vom aufrufenden Prozess geöffnet werden. Es leert alle Verbindungspools, die an den Prozess gebunden sind. Quote:

Verbindungspool und Verbindungszeichenfolge gehen Hand in Hand. Jeder Verbindungspool ist einer eindeutigen Verbindungszeichenfolge zugeordnet, und auch das ist für die Anwendung spezifisch. Das bedeutet wiederum, dass für jeden einzelnen Prozess, jede App-Domäne und jede Verbindungszeichenfolge ein separater Verbindungspool verwaltet wird.

+0

Danke. Die Dokumentation ist nicht klar darüber. Ich weiß, dass es für jede Konfiguration und jede Anwendung einen Pool gibt. Aber ClearAllPools ist Plural und es löscht mehrere Pools. Aber welche? Es kann sich nicht auf die Konfiguration verlassen, da es sich um eine statische Methode ohne Argumente handelt. Aber hängt es von der Prozess-/Anwendungsdomäne ab? –

+0

@Stefan, ja die Dokumentation ist nicht klar über diese Methode. Tatsächlich kann es mehrere Anwendungsbereiche geben, wenn mehrere Verbindungszeichenfolgen verwendet werden. Sobald Sie eine Verbindungszeichenfolge an eine 'SqlConnection' innerhalb einer Anwendungsdomäne übergeben, wird diese Verbindung entweder aus dem diesem Verbindungspool zugeordneten Pool erstellt oder ein neuer Pool wird erstellt, falls er nicht existiert. Deshalb gibt es auch die Methode 'SqlConnection.ClearPool', mit der Sie den Pool löschen können, der nur einer bestimmten Verbindung zugeordnet ist. Im Grunde ist der Pool pro Verbindungszeichenfolge/pro App-Domäne. –

+0

Sicher, das ist der Teil, den ich in der Dokumentation finden konnte. Aber ich konnte daraus nicht den "Geltungsbereich" von "ClearAllPools" ableiten. –

Verwandte Themen