none
OleDbConnection immer offen halten? RRS feed

  • Frage

  • Hallo Leute,
     
    so wie ich es verstanden habe, entspricht die OleDbConnection dem von DAO.OpenDatabase.
     
    Ist es problematisch, wenn ich in VBNet die OleDbConnection immer offen halte, wie ich es seinerzeit bei der OpenDatabase getan hatte. In meinem Programm habe ich recht viele Lesevorgänge. In VB6 hatte ich damit bisher nie Probleme gehabt.
     
    Mir kommt es nämlich so vor, als ob der Aufbau der Verbindung etwas länger dauert als in VB6 mit der OpenDatabase.
     
    Bei der Programmbeendigung würde die Connection schließen.
     
    Ich greife ausschließlich immer nur auf Access-DB’s zu.

    Gruß Ahmed

    --
    Antworten bitte nur im Forum
    System: Windows 7 64bit
    Office 2010 Prof.
    VB.NET 2008
    • Bearbeitet Ahmed Martens Donnerstag, 11. November 2010 17:03 Schreibfehler
    Donnerstag, 11. November 2010 16:59

Antworten

  • Ist es problematisch, wenn ich in VBNet die OleDbConnection immer offen halte

    Hallo Ahmed,
    solange es nur um eine einzige Connection-Instanz geht, nur um lokale Access-DB, und wenn in der MSDN-Doku dazu nichts ausdrücklich steht, sehe ich keine Probleme.

    Falls es um mehrere Connections ginge, kommt anderes ins Spiel:
    OLE DB... Verbindungspooling
    http://msdn.microsoft.com/de-de/library/ms254502.aspx

    Einige andere DB-Provider haben zum Pool intern weiter eine eigene "Connection Lifetime" bzw "Load Balance Timeout"  (ggf per Connection-String), wo die (physikalische) Verbindung nach gewisser Zeit abgebaut wird.
    http://blogs.msdn.com/b/angelsb/archive/2004/09/20/231963.aspx

    Donnerstag, 11. November 2010 19:25
  • Hallo Ahmed,

    nur als Ergänzung bzw. Info, falls das jemand mal in einer Webanwendung (bspw. ASP.NET) machen will:

    Dort ist sowas "tödlich". Für eine Webanwendung sollte man die Connection maximal für einen Request offen halten und dort bei der ersten Verwendung öffnen und nach der letzten Verwendung schließen. Je nach Anforderung kann es auch Sinn machen, die Verbindung wirklich nur dort zu öffnen, wo man sie benötigt und direkt wieder zu schließen, auch wenn man sie dann bei einem Request 3, 4, ... mal öffnen müsste. Welches Szenario sinnvoller ist, hängt aber von den genauen Anforderungen ab.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 11. November 2010 20:09
    Moderator
  • Hallo Ahmed,

    Ist es problematisch, wenn ich in VBNet die OleDbConnection
    immer offen halte, wie ich es seinerzeit bei der OpenDatabase
    getan hatte.

    Nein, es ist keineswegs problematisch.
    Es wäre im Gegenteil reine Ressourcenverschwendung und
    würde das Risiko eine beschädigte *.mdb zu bekommen, wenn
    Du eine Connection zu einer *.mdb ständig öffnen und schliessen
    würdest. Jedes Öffnen der Connection erfordert einen schreibenden
    Zugriff oder das Neuerstellen der zur *.mdb gehörenden *.ldb,
    jedes Schliessen der Connection einen weiteren schreibenden
    Zugriff oder das Löschen der *.ldb.
    Öffne die Connection am Beginn Deiner Anwendung bzw. vor dem
    ersten Zugriff auf die *.mdb und schliesse sie erst wieder, wenn
    Deine Anwendung beendet werden soll, bzw. wenn keine weiteren
    Zugriffe auf die *.mdb mehr erfolgen sollen.

    ... schnipp...

    Bei der Programmbeendigung würde die Connection schließen.

    Ja, das ist der richtige Zeitpunkt.

    Ich greife ausschließlich immer nur auf Access-DB's zu.

    Und eben deshalb Conneciton nach dem Start der
    Anwendung öffnen und erst wieder vor dem Beenden der
    Anwendung schliessen.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Freitag, 19. November 2010 17:37

Alle Antworten

  • Ist es problematisch, wenn ich in VBNet die OleDbConnection immer offen halte

    Hallo Ahmed,
    solange es nur um eine einzige Connection-Instanz geht, nur um lokale Access-DB, und wenn in der MSDN-Doku dazu nichts ausdrücklich steht, sehe ich keine Probleme.

    Falls es um mehrere Connections ginge, kommt anderes ins Spiel:
    OLE DB... Verbindungspooling
    http://msdn.microsoft.com/de-de/library/ms254502.aspx

    Einige andere DB-Provider haben zum Pool intern weiter eine eigene "Connection Lifetime" bzw "Load Balance Timeout"  (ggf per Connection-String), wo die (physikalische) Verbindung nach gewisser Zeit abgebaut wird.
    http://blogs.msdn.com/b/angelsb/archive/2004/09/20/231963.aspx

    Donnerstag, 11. November 2010 19:25
  • Hallo Ahmed,

    nur als Ergänzung bzw. Info, falls das jemand mal in einer Webanwendung (bspw. ASP.NET) machen will:

    Dort ist sowas "tödlich". Für eine Webanwendung sollte man die Connection maximal für einen Request offen halten und dort bei der ersten Verwendung öffnen und nach der letzten Verwendung schließen. Je nach Anforderung kann es auch Sinn machen, die Verbindung wirklich nur dort zu öffnen, wo man sie benötigt und direkt wieder zu schließen, auch wenn man sie dann bei einem Request 3, 4, ... mal öffnen müsste. Welches Szenario sinnvoller ist, hängt aber von den genauen Anforderungen ab.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 11. November 2010 20:09
    Moderator
  • Hallo Stefan,

    aus leidvoller Erfahrung kann ich dazu nur sagen, dass die Nutzung einer mdb in einer ASP.NET-Webanwendung bei größerer Last zu Problemen führen kann. Die Jet bringt undefinierte Fehler infolge des ständigen öffnen/Schreibens/Schließens der ldb.

    --

    Peter

    Freitag, 12. November 2010 03:55
  • Die Jet bringt undefinierte Fehler infolge des ständigen öffnen/Schreibens/Schließens der ldb.
    So ein Problem kenne ich auch noch von Opportunistic Locks (oplocks) her, auch wenn das mittlerweile keines mehr sein sollte.
    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 12. November 2010 04:41
  • Hallo Stefan,

    danke für die Info. Die Datenbank liegt auf dem Server. Der normale Zugriff findet sowieso über Access mittels einer Frontend- und Backendlösung statt. In meinem Programm wird in aller Regel nur gelesen und in weniger geschrieben.

    Ich werde es halt einfach einmal so machen wie unter VB6. Sollte es Probleme geben, kann ich das ja immer noch umstellen.

    Gruß Ahmed

    Freitag, 12. November 2010 06:53
  • Hallo Ahmed,

    Ist es problematisch, wenn ich in VBNet die OleDbConnection
    immer offen halte, wie ich es seinerzeit bei der OpenDatabase
    getan hatte.

    Nein, es ist keineswegs problematisch.
    Es wäre im Gegenteil reine Ressourcenverschwendung und
    würde das Risiko eine beschädigte *.mdb zu bekommen, wenn
    Du eine Connection zu einer *.mdb ständig öffnen und schliessen
    würdest. Jedes Öffnen der Connection erfordert einen schreibenden
    Zugriff oder das Neuerstellen der zur *.mdb gehörenden *.ldb,
    jedes Schliessen der Connection einen weiteren schreibenden
    Zugriff oder das Löschen der *.ldb.
    Öffne die Connection am Beginn Deiner Anwendung bzw. vor dem
    ersten Zugriff auf die *.mdb und schliesse sie erst wieder, wenn
    Deine Anwendung beendet werden soll, bzw. wenn keine weiteren
    Zugriffe auf die *.mdb mehr erfolgen sollen.

    ... schnipp...

    Bei der Programmbeendigung würde die Connection schließen.

    Ja, das ist der richtige Zeitpunkt.

    Ich greife ausschließlich immer nur auf Access-DB's zu.

    Und eben deshalb Conneciton nach dem Start der
    Anwendung öffnen und erst wieder vor dem Beenden der
    Anwendung schliessen.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Freitag, 19. November 2010 17:37
  • Danke für die Info.
    Gut zu wissen.

    Gruß Ahmed

    --
    Antworten bitte nur im Forum
    System: Windows 7 64bit
    Office 2010 Prof.
    VB.NET 2008
    Freitag, 19. November 2010 17:43