Verbindungsleckproblem in SQL server

Ich verwende SQL server 2008 Enterprise + C # + ADO.Net + .Net 3.5. Ich verwende den Verbindungspool auf der ADO.Net-Client-Seite (das Standardverhalten von ADO.Net). Ich verwende sp_who2 oder sys.dm_exec_connections, um aktive Verbindungsnummern zu finden (lass es mich wissen, ob meine Methode, aktive Verbindungsnummern zu finden, falsch ist).

Wenn ich jedes Mal, nachdem ich ein neues ADO.Net-Verbindungsobjekt erstellt und geöffnet habe, ich eine passende Schlussanweisung habe, um die ADO.Net-Verbindungsobjektinstanz nach dem Verwenden des Verbindungsobjekts zu schließen (um die memoryprozedur auszuführen), frage ich mich in diesem Szenario , sollte die aktive Verbindungsnummer immer 0 sein, nachdem ich die Verbindung von meiner ADO.Net-Client-Anwendung geschlossen habe und wenn die aktive Verbindungsnummer> 0 angezeigt wird, sollte es sehr komisch sein?

danke im voraus, George

Nicht so wird der ADO.NET-Verbindungspool Ihre Verbindung zum Pool zurückgeben, nachdem Close aufgerufen wurde. Die Verbindung kann an dieser Stelle nicht wirklich geschlossen werden. Um zu erzwingen, dass die Verbindung geschlossen wird, muss der Pool vor dem Schließen gelöscht werden. Versuchen Sie dies und Sie sollten die Verbindung schließen aus dem server.

var conn = new SqlConnection("a server goes here"); conn.Open(); SqlConnection.ClearAllPools(); conn.Close(); 

Schließen wird die Verbindung für den Verbindungspool freigegeben . Es bedeutet nicht, dass die physikalische Verbindung geschlossen ist.

Stellen Sie auch sicher, dass die .close endlich ist, also führt sie sowohl auf den regulären Fluss als auch wenn eine exception auftritt.

Vergewissern Sie sich, dass Sie die SqlConnection richtig schließen oder entsorgen. Die Entsorgung einer Verbindung wird automatisch geschlossen.

 using(SqlConnection connection = new SqlConnection(connectionString)) { } //The connection will close automatically here 

Aber Sie können explizit sein und noch ein .Close () vor dem Ende der Verwendung.

Sie können auch alle ausstehenden Verbindungen löschen, die den Status Warten auf Befehl haben, indem Sie anrufen

 SqlConnection.ClearAllPools();