Benutzer mit den meisten Antworten
OleDbConnection immer offen halten?

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
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
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 25. November 2010 12:14
-
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- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 25. November 2010 12:14
-
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)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 25. November 2010 12:14
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
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 25. November 2010 12:14
-
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- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 25. November 2010 12:14
-
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
- Bearbeitet Robert BreitenhoferModerator Freitag, 12. November 2010 12:20 Formatierung
-
Die Jet bringt undefinierte Fehler infolge des ständigen öffnen/Schreibens/Schließens der ldb.
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- Bearbeitet Robert BreitenhoferModerator Freitag, 12. November 2010 12:21 Formatierung
-
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
-
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)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 25. November 2010 12:14