myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Dauer static OleDbConnection wenn nur seitens einem Programm Zugriff?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Dauer static OleDbConnection wenn nur seitens einem Programm Zugriff?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ck82
myCSharp.de-Mitglied

Dabei seit: 28.09.2015
Beiträge: 22


ck82 ist offline

Dauer static OleDbConnection wenn nur seitens einem Programm Zugriff?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
10.10.2019 12:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.321
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
10.10.2019 13:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.054
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.


Zitat von T-Virus:
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.
10.10.2019 13:14 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.10.2019 08:02