Laden...

Dauer static OleDbConnection wenn nur seitens einem Programm Zugriff?

Erstellt von ck82 vor 4 Jahren Letzter Beitrag vor 4 Jahren 767 Views
C
ck82 Themenstarter:in
34 Beiträge seit 2015
vor 4 Jahren
Dauer static OleDbConnection wenn nur seitens einem Programm Zugriff?

Liebe Profis,

ich habe ein web.api-Host geschrieben, welcher aktuell noch von einer OleDbConnection (Access-Datei) Daten abholt und an die Clients verteilt.

Bisher hatte ich bei jeder Anfrage seitens des clients die OleDbConnection geöffnet.

Nun habe ich es umgestellt auf eine einzige OleDbConnection in static, welche von jeder Abfrage genutzt wird.

Dies sollte beheben, dass wenn mehrere clients gleichzeitig anfragen stellen, dies zu einem Fehler führt, da OleDbConnection bereits geöffnet.

Ist es ok, wenn man eine einzige OleDbConnection für das Programm nutzt oder habt ihr Erfahrungen welche eher zu einzelnen öffnen rät?

Ist es möglich eine OleDbConnection den ganzen Tag offen zu halten?

Hoffe auf guten input von den Profis.

Gruß

ck

T
2.222 Beiträge seit 2008
vor 4 Jahren

Es ist löblich, dass du bereits von den Clients hin zu einer Web API den Datenzugriff verlagert hast.
Aber anstelle von Access solltest du eine richtige Datenbank verwenden.
Selbst freie/kostenlose Datenbanken gibt es, die dir einige Probleme ersparen.

Je nach Anwendungsfall und DB größe kannst du dir auch einen SQL Server Express aufsetzen.
Bitte verwirf Access hier ganz schnell, da dies kein Ersatz für eine saubere Datenbank ist.
Access hat im .NET Bereich nichts verloren!

Auch ist es eine sehr dumme Idee, Datenbankverbindungen lange offen zu halten.
Jede Verbindung sollte nur kurz gehalten werden um die eigentliche Aktion auf dem Datenbestand durchzuführen!

Bei Access und anderen Dateibasierten "Datenbanken" sind auch parallele Zugriffe, was durch die Web API und mehere Clients bereits gegeben ist, auch schon ein Problem.
Durch konkurrierende Zugriffe sperren sich auch die Verbindungen gegenseitig ist, was bei einem richtigen Datenbankserver nicht passieren kann.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.827 Beiträge seit 2008
vor 4 Jahren

Nein, das ist grundlegend nicht gut - und das ist auch gar nicht die Aufgabe von static.

Dein Problem: weder Access selbst noch die Verbindung ist Multi-Threading-Faehig.
Du kommst um ein locking nicht drum herum. Und ja, dass heisst Single Access only.

Einzige Möglichkeit das korrekt zu lösen: Access ersetzen.

Durch konkurrierende Zugriffe sperren sich auch die Verbindungen gegenseitig ist, was bei einem richtigen Datenbankserver nicht passieren kann.

Nein, die Verbindungen sperren sich nicht gegenseitig.
Aber Access hat einfach von sich aus überhaupt keine Unterstützung für einen Multi-Threaded Zugriff.
Jede Verbindung lockt durch den Provider (und nicht durch die Connection selbst) das Access File und ist für andere nicht mehr verwendbar.

Sqlite ist zB. auch nur ein einziges File - aber der Provider kann mit mehreren Verbindungen selbst aktiv umgehen.