2010-02-02 9 views
8

Hintergrund:
Ich habe eine Anwendung, die ich meine Schnittstellenlogik von meiner Middle-Tier-Logik, die die Abfragen an die Datenbank verarbeitet hat. Ich mache eine Menge von benutzerdefinierten Sortierung und Einengungen, so dass ich nicht viele SqlDataSources verwende und stattdessen viele gespeicherte Prozeduren mit SqlCommands aufrufen.Wie viele Instanzen von SqlConnection sollte ich verwenden

Ich verwende die Formularauthentifizierung, um geschützte Unterverzeichnisse zu erstellen. In den web.config-Dateien in den geschützten Verzeichnissen habe ich mehr Verbindungszeichenfolgen, die mit Benutzern mit Rollen mit höherer Priorität verknüpft sind.

Frage:
Sollte ich ein SqlConnection-Objekt in meiner mittleren Schicht freigeben, um sich wiederholenden Code zu entfernen, oder sollte ich für jede Operation eine neue Instanz erstellen? Eine gemeinsam genutzte SqlConnection könnte ich wieder instanziieren, wenn ich Verbindungszeichenfolgen ändern muss, um Zugriff auf geschützte gespeicherte Prozeduren zu erhalten. Gibt es hier eine Best Practice?

Antwort

10

Machen Sie sich keine Sorgen über die gemeinsame Nutzung von Ressourcen. .NET wird das für Sie verwalten, es führt standardmäßig das Pooling von Verbindungen durch. Schreiben Sie den Code, um klar und verständlich zu sein, und lassen Sie sich von .NET über diese Details informieren.

8

Erstellen Sie so viele SqlConnections, wie Sie benötigen, so kurz wie möglich gelebt, durch die Verwendung Aussage:

using (var connection = new SqlConnection(...)) { 
    connection.Open(); 
    ... 
} 

Sql Verbindungen von einem Verbindungspool genommen werden, die automatisch Anstoß für Dich verwaltet.

Siehe: http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.80).aspx

+2

+1 für die Antwort. Die "using" -Syntax ist definitiv der Weg zu gehen (ich denke, es kann auch für den Datei-/Stream-Zugriff verwendet werden). –

+2

Sicher kann es für jede verfügbare Ressource (Klassen implementieren IDisposable) –