Connections/Prozesse auf SQL Server terminieren nicht

15/01/2009 - 14:52 von Joachim Hofmann | Report spam
Hallo,

ich erzeuge eine Connection, mache ein Command auf, welches ein einfaches
SELECT enthàlt, weise das Command-Objekt der obigen Connection zu.
Öffne die Connection und führe ein ExecuteScalar() aus.
Connection Pooling ist "YES".

Danach führe ich Close() sowie Dispose() auf die Connection aus und
auch Dispose() auf das Command.

Auf dem Server sind dann zwei Prozesse aus dem Programm sichtbar, solange das
Programm geöffnet ist,
auch nach dem Ausführen der Close()-Methode.
Die eine enthàlt das erwartete SQL, die andere enhàlt keinen SQL-Text.

Fragen:

- Warum sind zwei und nicht ein Prozess auf dem Server?
- Und vor allem: Warum verschwindet der Prozess nicht, wenn die Close()-Methode
aufgerufen wird,
sondern erst nach Schließen des Programms?

Ist das "normal", oder any ideas?

Vielen Dank
Joachim

[VB.Net 2003 / SQL Server 2000]
 

Lesen sie die antworten

#1 Elmar Boye
15/01/2009 - 16:19 | Warnen spam
Hallo Joachim,

Joachim Hofmann schrieb:
ich erzeuge eine Connection, mache ein Command auf, welches ein einfaches
SELECT enthàlt, weise das Command-Objekt der obigen Connection zu.
Öffne die Connection und führe ein ExecuteScalar() aus.
Connection Pooling ist "YES".

Danach führe ich Close() sowie Dispose() auf die Connection aus und
auch Dispose() auf das Command.

Auf dem Server sind dann zwei Prozesse aus dem Programm sichtbar,
solange das Programm geöffnet ist,
auch nach dem Ausführen der Close()-Methode.
Die eine enthàlt das erwartete SQL, die andere enhàlt keinen SQL-Text.

Fragen:

- Warum sind zwei und nicht ein Prozess auf dem Server?



.NET 1.x (also auch VB 2003) eröffnete die Verbindungen immer paarweise,
.NET 2.0 (bzw. 3.5) macht das nicht mehr, dort wird nur eine Verbindung
eröffnet.

- Und vor allem: Warum verschwindet der Prozess nicht, wenn die
Close()-Methode aufgerufen wird, sondern erst nach Schließen des
Programms?



Die Verbindung bleibt solange eröffnet bis der ihre Lebenzeit
abgelaufen ist, was durch "Connection Lifetime" gesteuert wird.

Ist das "normal", oder any ideas?



Es ist normal.

Mehr dazu findest Du unter:
<URL:http://msdn.microsoft.com/de-de/lib...a.aspx>
"SQL Server-Verbindungspooling (ADO.NET)"

Dabei wird allerdings .NET 2.0 und höher beschrieben, wo das
Konzept verfeinert wurde, die Grundzüge gelten aber von Anfang an.
Die àltere (nur englisch):
<URL:http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.71).aspx>

Gruß Elmar

Ähnliche fragen