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
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Problem mit Access und mehreren DB-Connections
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Problem mit Access und mehreren DB-Connections

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Cookiie Cookiie ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2328.jpg


Dabei seit: 27.06.2007
Beiträge: 360
Entwicklungsumgebung: VS 2010
Herkunft: früher Leipzig, jetzt Out of Rosenheim


Cookiie ist offline

Problem mit Access und mehreren DB-Connections

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

verwendetes Datenbanksystem: Access 2007/2010

Hi,

ich arbeite zwar momentan unter VB.net, sollte aber für das Problem nicht relevant sein.
Folgendes Konstrukt:

Ich habe eine HauptConnection für die DB im MainThread. Für gewisse Aufgaben starte ich einen Backgroundworker der eine eigene Connection erhält und diese nach getaner Arbeit auch wieder aufräumt.

Im konkreten Fall erstelle ich ein größeres Dokument und speichere es im Backgroundworker in der DB und nach beenden des Workers lade ich selbiges und versuche es anzuzeigen.
Mitunter findet der Hauptthread den neuen Datensatz nicht, obwohl dieser fertig geschrieben wurde.
Wenn der selbe Code mit dem SQL-Server durchlaufen wird, gibt es keine Probleme.

Hat Access hier ein gewisses Delay bzw. wie kann ich sicherstellen, das ich mit dem Hauptthread auf den Datensatz der durch den Nebenthread geschrieben wurde zugreifen kann?

Gruß Cookiie
21.06.2012 09:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 5.362
Entwicklungsumgebung: VS 2010 sup{Editionen}
Herkunft: Waidring / Tirol


gfoidl ist offline

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

Hallo Cookiie,

Access ist ja auch keine Datenbank ;-)
Nimm besser eine vernüftige Datenbank und das Problem ist gelöst. Im Forum wurden solche Themen schon öfters behandelt. Eine Übersicht über Datenbanken zeigt  Empfehlungen für SQL-Datenbank gesucht

mfG Gü
21.06.2012 11:07 Beiträge des Benutzers | zu Buddylist hinzufügen
Cookiie Cookiie ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2328.jpg


Dabei seit: 27.06.2007
Beiträge: 360
Entwicklungsumgebung: VS 2010
Herkunft: früher Leipzig, jetzt Out of Rosenheim

Themenstarter Thema begonnen von Cookiie

Cookiie ist offline

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

Hi,

ich hätte ja drauf wetten können das so eine Antwort kommt.
Als ob ich eine Wahl hätte, gewachsenes Produkt und wird vom Kunden immernoch verlangt und solange wir sagen, wir unterstützen es, wird es auch unterstützt, egal wie eklig das im Handling ist.
Neukunden wird ja sowieso grundsätzlich der SQL-Server ans Herz gelegt.

Also, ich brauch hier zumindest Lösungsideen wie man das handeln könnte.

Gruß Cookiie
21.06.2012 11:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt Abt ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 3.404
Entwicklungsumgebung: VS2010, VS2012, ReSharper
Herkunft: Stuttgart


Abt ist offline

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

Bei mehreren Threads auf Access, das dafür einfach nicht gedacht ist, sind solche Phänomene eben vorhanden.


Eine Lösung wäre eben eine Schnittstelle für die Access-Datenhaltung zu schreiben, die alles sequenziell über eine einzige Verbindung hält.
zB ein Repository mit einem Nested Singleton.

Willst Du auf der parallelen Zugriffschine über mehrere Verbindungen bleiben, dann musst Du mit solchen Phänomenen leben.
21.06.2012 12:28 Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 8.490


FZelle ist offline

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

Indem man schon mal keine offene globale Connection benutzt.

Der Jet Treiber der von OleDb benutzt wird ist ein ekelhaftes gerät wenn man mehr als eine Verbindung gleichzeitig offen hat.
Deshalb sollte man das tunlichst vermeiden.

Das Problem ist aber das Connectionpooling das bei Multizugriff auf mdb's nicht wirklich vorteilhaft ist.

Also schalte Connectionpooling aus und lass auf keinen Fall die HauptConnection offen.
21.06.2012 12:30 Beiträge des Benutzers | zu Buddylist hinzufügen
san-software
myCSharp.de-Mitglied

Dabei seit: 28.08.2008
Beiträge: 52


san-software ist offline

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

Ich habe bei Accees festgestellt, daß genau Dein Problem mit einer Transaktion zu lösen ist.
Tatsächlich arbeitet der Access-Treiber im Hintergrund und schreibt teilweise Daten bzw. Verwaltungsdaten erst in die DB zurück, wenn er Lust :-) hat.

Durch öffnen einer Transaktion, schreiben der Daten und anschliessendem Commit wird er dazu gezwungen die Daten entgültig zu schreiben.

Damit sollte es eigentlich funktionieren.
21.06.2012 12:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cookiie Cookiie ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2328.jpg


Dabei seit: 27.06.2007
Beiträge: 360
Entwicklungsumgebung: VS 2010
Herkunft: früher Leipzig, jetzt Out of Rosenheim

Themenstarter Thema begonnen von Cookiie

Cookiie ist offline

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

Hi,

ja das mit dem zurückschreiben wenns grad so passt, hab ich gefühlt auch. Ist auch die einzige Stelle wo es extrem auffällt, weil erst geschrieben und im Anschluss gleich gelesen wird.

Das mit der Transaktion werd ich mal probieren. Wir haben hier schon einen vorhandenen DBLayer, kann sein das der das schon weitesgehend wegkapselt. Da bin ich aber noch nicht so tief drin im Code.

Was die generelle Verwendung angeht, eines unserer Probleme ist zB auch das manche Kunden Access verwenden und da durchaus Datenmengen zusammenkommen, die die 2GByte-Grenze von Access erreichen. Ist wie gesagt schon alles sehr an der Grenze des sinnvollen und machbaren bei Access. Aber solange der Leidensdruck noch nicht hoch genug ist under ProduktOwner nichts anderes sagt, bleibts eben bei Access + SQL Server.

Danke für die Hilfe
Cookiie
21.06.2012 13:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 8.490


FZelle ist offline

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

Wenn doch sowieso schon Sql Server, warum dann noch Access?
21.06.2012 16:45 Beiträge des Benutzers | zu Buddylist hinzufügen
Cookiie Cookiie ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2328.jpg


Dabei seit: 27.06.2007
Beiträge: 360
Entwicklungsumgebung: VS 2010
Herkunft: früher Leipzig, jetzt Out of Rosenheim

Themenstarter Thema begonnen von Cookiie

Cookiie ist offline

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

Tja, gewachsenes Produkt und im Moment nutzen es einfach noch zuviele Kunden die dann auch nicht bereit sind zu wechseln. Denke mal das wird früher oder später kommen (eher später). Wenns mal eben so ginge, wäre Access schon vor 2 MainReleases rausgeflogen.

Habs jetzt aber lösen können, ich fahr einfach in ner Schleife solange die Abfrage durch bis der Datensatz zugreifbar ist, was mitunter erst nach 5sec der Fall ist.

Gruß Cookiie
22.06.2012 10:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 8.490


FZelle ist offline

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

Zitat:
Aber solange der Leidensdruck noch nicht hoch genug ist under ProduktOwner nichts anderes sagt, bleibts eben bei Access + SQL Server.

Deswegen die Frage.
22.06.2012 10:58 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Monate.
Der letzte Beitrag ist älter als 11 Monate.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 25.05.2013 07:52