Welche Best Practices zum Verwalten von Datenbankverbindungen in .NET gelten?

8

Was die beste Vorgehensweise für die Verwaltung von Datenbankverbindungen in einer .NET-Anwendung angeht - ich weiß, dass es im Allgemeinen nicht gut ist, ein Verbindungsobjekt zu umgehen.

Allerdings habe ich einige besondere Kuriositäten:

1. Ich habe zwei Geschäftsfälle     Objekte, verschiedener Klassen, in a     Eltern-Kind-Beziehung (das Kind     ist privat.) Welche der folgenden     ist das Beste?

  • Halten Sie eine private statische Verbindung geöffnet und freigegeben, die von beiden Objekten verwendet wird, und lassen Sie sie offen, bis das übergeordnete Element entfernt wurde.

  • Lassen Sie zwei private statische Verbindungen offen, eine für jedes Objekt, um nicht zu sein geschlossen bis das Objekt entsorgt wird.

  • Behalte keine statischen Verbindungen; Öffnen und schließen Sie anschließend ein neues Verbindung für jede Methode, die es erfordert. Die meisten meiner Methoden führen jedoch nur 1-3 Abfragen aus, also scheint das ineffizient ...?

2. Meine zweite Frage ist im Wesentlichen die gleiche, aber für eine einzige Form. Was ist das Beste hier?

  • Halten Sie eine private statische Verbindung für die gesamte Lebensdauer des Formulars offen und freigegeben.

  • Behalte keine statische Verbindung; Öffnen und schließen Sie anschließend für jede Methode eine Verbindung in der Form, die sie benötigt (wiederum nur 1-3 Abfragen pro Methode).

Rob 15.07.2010, 18:41
quelle

4 Antworten

10

(War ein Kommentar) ...

Die Theorie besagt, dass Sie nicht aus Ihrer Geschäftslogik auf die Datenbank zugreifen sollten - sie sollte in einer separaten Datenzugriffsklasse sein. (Sagen Sie zum Beispiel, dass Sie sie in Zukunft offline in XML speichern müssen, oder verwenden Sie Oracle anstatt SQL Server ... Sie möchten Ihre Geschäftslogik nicht neu schreiben!)

Ihren Geschäftsobjekten sollten keine Datenbankverbindungen zugeordnet sein. Die Verbindung sollte in einer DAL-Factory-Typ-Methode geöffnet werden, das Objekt wird abgerufen / erstellt, dann die Verbindung geschlossen und das Objekt zurückgegeben.

Die Geschäftsobjekte selbst sollten Geschäftslogikfelder und -methoden enthalten, die möglicherweise zurück an die Datenzugriffsebene gesendet werden, die für jede DAL-Methode eine neue Datenbankverbindung erstellen soll.

Ihre Ineffizienz-Ängste können mithilfe von Connection Pooling zum Stillstand gebracht werden. Wenn Sie eine Verbindung hunderte Male öffnen und schließen, werden sie wahrscheinlich alle dieselbe verwenden. Aber Sie sollten Datenbankverbindungen überhaupt nicht herumhängen lassen - besonders nicht als Mitglieder einer Klasse.

Hoffe das hilft!

    
Kieren Johnstone 15.07.2010, 19:19
quelle
8

Mein Verständnis ist, dass Verbindungen nur so lange offen bleiben sollten wie nötig. Die meiste Zeit habe ich Verbindungen in Using-Anweisungen gesehen, ähnlich wie bei

%Vor%     
charachu 15.07.2010 18:46
quelle
7

Dieser Link kann hilfreich sein: Best Practices für die Verwendung von ADO.NET

Hier ist ein interessanter Auszug.

  

Für die beste Leistung halten Sie Verbindungen aufrecht   zur Datenbank nur öffnen, wenn   erforderlich. Reduzieren Sie auch die Anzahl der   wenn Sie eine Verbindung öffnen und schließen   für mehrere Operationen.

Ich habe immer die Praxis verfolgt, Verbindungen in einem using-Block zu öffnen, so dass die Dispose-Methode (und damit die Close-Methode) immer aufgerufen wird, ohne dass ich mir darüber Gedanken machen muss. Mit diesem Ansatz bin ich nie auf eine Situation gestoßen, in der eine schlechte Leistung entweder mit übermäßigen gleichzeitigen Verbindungen oder übermäßigen Setup- oder Abbruchoperationen verbunden war.

    
John M Gant 15.07.2010 19:14
quelle
6

Als Antwort auf beide Fragen sollten Sie, wenn Sie etwas mit Verbindungspooling verwenden, wie ADO.NET, Ihre Abfragen so codieren, dass die Verbindung so kurz wie möglich geöffnet bleibt. I.e. %Code%. Wenn Sie die Verbindung schließen, wird sie an den Verbindungspool zurückgegeben und bei einer nachfolgenden Abfrage erneut verwendet. Dadurch werden Sie keine Leistungseinbußen erleiden, indem Sie eine Reihe von Verbindungen öffnen und schließen. Der Vorteil ist, dass Sie nicht riskieren, Verbindungen zu verlieren, die Sie vergessen haben, zu schließen, und auf lange Sicht haben Sie weniger gleichzeitige Verbindungen geöffnet, als wenn Sie Verbindungen für längere Zeit geöffnet halten. Es spielt keine Rolle, ob es sich bei der Anwendung um ein Windows-Formular anstelle eines Webformulars handelt: Halten Sie Verbindungen so kurz wie möglich.

    
Thomas 15.07.2010 19:13
quelle