Richtige Vorgehensweise bei einer Datenbankverbindung



  • Ich möchte in einem Programm mehrere Zugriffe auf eine Datenbank durchführen. U.A. soll beim Start überprüft werden, ob die Tabellen vorhanden sind, ansonsten werden sie erstellt. Im laufenden Betrieb möchte ich an verschiedenen Stellen Schreib- und Lesezugriffe durchführen. Ich habe gelesen, dass bei jedem Zugriff auf die Datenbank eine seperate DBConnection aufgebaut werden sollte. Dafür sei das sogenannte Connection Pooling zuständig. Bedeutet das, dass ich die Connection anschließend auch sofort mit .Close() schließe?
    Oder erfolgt das automatisch?



  • Verbindung aufbauen
    Daten lesen/schreiben
    Verbindung schließen

    Wenn du die Verbindung länger als nötig auferhältst wird es spätestens dann problematisch, wenn mehrere Anwendungen auf die selbe Datenbank zugreifen wollen



  • zwutz schrieb:

    Verbindung aufbauen
    Daten lesen/schreiben
    Verbindung schließen

    Wenn du die Verbindung länger als nötig auferhältst wird es spätestens dann problematisch, wenn mehrere Anwendungen auf die selbe Datenbank zugreifen wollen

    Das ist schlichtweg falsch 👎 . Solange die Applikation nur eine Verbindung zu einer Datenbank hält, stört es andere Applikationen gar nicht. Die werden nur behindert, wenn eine Transaktion länger als nötig offen gehalten wird.

    In Applikationen sollte man in der Regel beim Programmstart eine Verbindung aufbauen und beim beenden des Programms wieder schließen. Die Verbindung aufzubauen kostet unnötig Ressourcen.

    Connectionpooling ist in der Regel bei Anwendungen mit mehreren Threads sinnvoll.



  • Das was Du schreibst ist auch zum Großteil falsch.
    Hier kommt es erstmal auf die Sprache an.
    In NET:
    NET verwendet einen Connectionpool.
    Ist ein Connectionstring auf diesen Pool aufgebaut dann fordert das Programm aus diesem Pool eine Verbindung. Gibt es noch kein wird eine aufgebaut.
    Gibt es bereits eine dann wird diese Verbindung an das Programm zurückgegeben.
    Dies bedeutet jedoch auch das man die Verbidung wieder schließen muss.
    Hier wird aber lediglich die Verbindung zum Pool geschlossen.
    Standard sind 100 Verbindungen.
    Würde man jetzt eine ASPNET-Seite machen und so vorgehen wie bei dir (Start der Seite DB-Öffnen und dann erst wieder schließen wenn die Seite an den Client geliefert wurde) dann kommt man schnell an die Grenzen wenn man viele Besucher hat.
    Das gleiche passiert wenn viele User ein Programm starten welches diese Connection verwendet.
    In der Regel ist die Anzahl DB-Zugriffe nicht so oft als das man sie offen lassen muss.
    Je nach DEF der Anzahl POOL-Verbindungen im Connectionstring hat man dann probleme und weiß nicht wieso.
    Somit kann man nicht pauschalieren. Ein Verbindung offen zu halten ist gut denn das Aufbauen einer solchen dauert.
    Wenn die DB aber viele Verbindung offen halten muss ist irgendwann das Ende jedes Rechners und Netzwerkes erreicht und er kann sich nicht mehr auf das stürtzen was eigentlich seine Arbeit ist. (Daten liefern)


Log in to reply