2009-02-27 12 views
1

1) bemerkte ich, dass nach dem Schließen SqlConnection-Instanz, Sie sind noch in der Lage, wieder öffnet die gleiche Verbindung: meWiedereröffnung SqlConnection Instanz

a) können Sie sagen, was hinter den Kulissen vor sich geht? Das heißt, nachdem wir das Dateistromobjekt geschlossen haben, können wir es nicht erneut öffnen, sondern müssen stattdessen ein neues Objekt erstellen. Warum ist das also bei SqlConnection-Objekten nicht der Fall?

b) Wenn Pooling aktiviert ist, dann nehme ich an, dass das Verbindungsobjekt in den Verbindungspool zurückgegeben wird und später wiederverwendet werden kann ?!

Aber woher wissen wir, dass wir nach dem Öffnen der Verbindung die gleiche Sqlconnection-Instanz bekommen, wie vor dem ersten Schließen? Ich frage das, weil, soweit ich weiß, auch wenn der Verbindungspool mehrere Verbindungen zur Verfügung hat, diese SqlConnection-Objekte einen anderen Status als das ursprüngliche SqlConnection-Objekt haben könnten (durch "anderen Zustand" meine ich, dass einige Eigenschaften andere Werte als diese haben könnten) im "originalen" Verbindungsobjekt) ?!

c) Was passiert, wenn Pooling nicht aktiviert ist? Erstellt .Net das SqlConnection-Objekt "von Grund auf neu"? Noch bevor wir das SqlConnection-Objekt geschlossen haben, haben wir möglicherweise die Werte einiger Eigenschaften geändert. Wie wird der Compiler wissen, wie der Status des SqlConnection-Objekts wiederhergestellt wird, bevor wir es geschlossen haben?

danke

Antwort

3

SqlConnection nicht direkt die „echte“ Verbindung in erster Linie ist. Der Verbindungspool kümmert sich darum. Ich weiß es nicht sicher, aber ich wäre nicht überrascht, wenn Sie die SqlConnection wieder öffnen, könnten Sie auf einer anderen "physischen" Netzwerkverbindung landen.

könnten Sie schreiben ein FileStream die Wiedereröffnung erlaubt - wenn sie den Überblick über die Namen der Datei sowie den zugrunde liegenden Griff gehalten wird, könnte es nur versuchen, es erneut zu öffnen, mit allen möglichen Fehlern usw. Es ist einfach nicht sehr hilfreich. (Ich kann nicht sagen, dass ich wieder SqlConnection nützlich persönlich finden kann, frei zugeben.)

In Bezug auf zu wissen, dass Sie "das gleiche SqlConnection Objekt" bekommen - Sie rufen nicht eine Methode, die eine zurückgibt Referenz auf ein SqlConnection Objekt, Sie rufen nur eine Methode auf einem bestehenden Objekt. Diese Referenz ändert sich nicht - nur der Zustand des Objekts (oder möglicherweise der Zustand von etwas anderem, auf das es sich bezieht).

Ich weiß nicht, was passieren würde, wenn Pooling nicht aktiviert wäre. Es konnte kein brandneues SqlConnection-Objekt erstellt werden (oder vielmehr könnte es, aber das wäre nicht ersetzen das, auf das Sie bereits einen Verweis hatten). Ich vermute, dass alles darauf hinausläuft, dass SqlConnection ein Wrapper um "etwas anderes" ist - und das "etwas anderes" könnte sicherlich neu erstellt werden.

Verwandte Themen