5 Stimmen

Prüfen, ob eine offene Verbindung zur Datenbank besteht asp.net/c#

Jedes Mal, wenn meine Anwendung eine gespeicherte Prozedur ausführt, tut es etwas wie dieses:

using (DbBase conn = new DbBase())
{      
    //call sproc
}

die DBBase() öffnet die Verbindung mit einer LINQ DataContext .

Was ich wissen wollte, war, ob es gibt eine Möglichkeit, zu wissen, ob eine Verbindung bereits geöffnet wurde, und diese zu verwenden, anstatt eine neue zu öffnen . Diese Überprüfung sollte innerhalb der DbBase() Konstruktor, der folgendermaßen funktioniert:

ClientDB = new ClientDBDataContext([ConnectionString from web.config]);

Dankeschön

5voto

womp Punkte 113535

Sie sehen sich die State Eigenschaft eines beliebigen DBConnection Objekt, und es wird Ihnen sagen, ob es offen, geschlossen, verbindend, ausführend, abrufend oder unterbrochen .

Durch die Nutzung des using{ } Anweisung können Sie jedoch sicher sein, dass die Verbindung geschlossen wird, wenn das Objekt den Gültigkeitsbereich verlässt.

1 Stimmen

Ich würde es bevorzugen, wenn in der Antwort erwähnt würde, dass using() die Verbindung nicht wirklich schließt, sondern sie einfach wieder in den ADO.Net Connection Pool freigibt, um wiederverwendet zu werden...

0 Stimmen

@Charles - die Close-Methode wird speziell während Dispose() von DbConnection-Objekten aufgerufen. ADO.Net behält die Pooling-Informationen bei, aber für den Client ist die Verbindung geschlossen, was eine gute Sache ist.

2voto

Nick Punkte 1698

Das Schöne an der Verwendung von using ist, dass dies die Art von Dingen ist, über die man sich keine Sorgen machen muss.

0 Stimmen

Ich habe dies mit einem DV versehen, weil ich glaube, dass es unzureichend ist, um den Mangel an Wissen des Auftraggebers in diesem Bereich zu beheben. Ich sage nur "Mach dir keine Sorgen, sei glücklich, using wird alle lösen..." beantwortet nicht die Frage oder füllen Sie die Lücken in der OPs Verständnis über ADO.Net-Verbindungspooling, die im Herzen dieses Problems liegt.

1 Stimmen

@cb: Die Antwort von Womp ist die beste, und ich habe sie hochgestuft, um darauf hinzuweisen. Hätte ich sie gesehen, hätte ich meine schnelle und schmutzige Antwort nicht gepostet.

0 Stimmen

Ich habe die richtige Antwort geändert, keine Sorge. Ich kenne mich mit Pooling aus, und Ihre Antwort war ausreichend, soweit ich weiß, aber ich muss zustimmen, dass die von Womp vollständiger ist.

2voto

Charles Bretana Punkte 137391

Bei aktiviertem Verbindungspooling (Standardeinstellung - es sei denn, Sie haben es explizit ausgeschaltet) ist dies kein Problem. Lassen Sie die Verbindung Pooling-Code behandeln diese. Wenn Sie die Verbindung schließen, wird sie eigentlich nur für den Pool freigegeben, damit sie wiederverwendet werden kann. Nur wenn keine Verbindung im Pool vorhanden ist, wird eine neue Verbindung für Sie erstellt (und geöffnet). Gut, dass Sie die using Erklärung. Dadurch wird sichergestellt, dass die Verbindung zur Wiederverwendung in den Pool zurückgegeben (NICHT geschlossen) wird, sobald dieser Codeschnipsel damit fertig ist.

1voto

Rodrick Chapman Punkte 5327

Ich würde mir keine Sorgen machen (es sei denn, Sie haben ein Profil erstellt oder so). Mit Verbindungspooling kann das Öffnen einer neuen Verbindung sehr billig sein. Wenn es ein Problem gibt, sollten Sie vielleicht die Anzahl der Verbindungen im Pool ändern ( http://www.15seconds.com/issue/040830.htm )

0 Stimmen

Vielen Dank für Ihre schnelle Antwort. Ich stimme über Verbindung Pooling, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, trotzdem.

1voto

Joel Coehoorn Punkte 377088

Ich weiß nicht, wie es bei DBase ist, aber der Sql Server Provider macht das zumindest schon für Sie. Er verwendet Verbindungspooling im Hintergrund, um bestehende Verbindungen nach Möglichkeit wiederzuverwenden.

0 Stimmen

DbBase ist eine Klasse, die ich erstellt habe, um die Datenkontexte zu verwalten, die wir im Projekt haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X