Autor Beitrag
thas11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Do 17.03.11 17:37 
Hallo!

Ich muss in ca.100 unterschiedliche AcessDatenbanken "gleichzeitig" Daten reinschreiben
Zum Verbindungsaufbau nehm ich eine OleDBConnection... Nun ist leider bei ca. 70 Verbindungen schluss und ich ich bekomm als Fehlermeldung "Unknown Error"
Scheinbar gibt es hier irgendeine Limitierung ...

Hat jemand eine Idee?

Danke im voraus & lg,
Wolfi
thas11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Do 17.03.11 19:32 
Hallo!

Hab inzwischen ziemlich fleißig gegoogelt und die Info gefunden, das Jet.OleDB ein Limit von maximal 64 Connections hat...
Kann man hier noch etwas machen oder ist bei 64 Connections für mich schluss ?

Danke & lg
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 17.03.11 20:17 
Warum müssen die Daten denn gleichzeitig geschrieben werden? Du könntest sie doch auch zwischenspeichern und dann abwechselnd in die einzelnen Datenbanken übertragen.
stendate
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 1



BeitragVerfasst: Do 17.03.11 22:57 
user profile iconthas11 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo!

Hab inzwischen ziemlich fleißig gegoogelt und die Info gefunden, das Jet.OleDB ein Limit von maximal 64 Connections hat...
Kann man hier noch etwas machen oder ist bei 64 Connections für mich schluss ?


Ich gehe schon davon aus dass da irgendwo ein Limit existiert, im Normalfall reicht das ja auch mehr als aus.
Man könnte vieleicht ein bischen mit dem Connection-Pooling und einer Pool Size von 1 experimentieren, aber die Chancen stehen da ehr schlecht.

Müssen die Daten im Rahmen einer Transaktion verarbeitet werden? Wenn nein, dann könnte man versuchen dass über 2 Hosts zu lösen. Also die Quelle Schreibt in eine Datenbank A.mdb (Zwischenspeicher) auf Host A. Host A baut je eine Connection zu 50 Zieldatenbanken auf, und auf einem zweiten Client B wird A.mdb gelesen und in die restlichen 50 Zieldatenbanken geschrieben.

Alles in Allem klingt das Szenario aber schon "übel", in vielerlei Hinsicht. :)
thas11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Fr 18.03.11 00:38 
Hi!

Erstmal danke für die Antwort!

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Warum müssen die Daten denn gleichzeitig geschrieben werden? Du könntest sie doch auch zwischenspeichern und dann abwechselnd in die einzelnen Datenbanken übertragen.


Nein, geht leider nicht, da es sich wirklich um sehr viele Daten handelt daher auch die 100 mdb's ...

Ich glaub ich werd mich einfach mit dem Limit abfinden...

Danke & lg
IsNull
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 97
Erhaltene Danke: 11


VS 2010, C#, AHK
BeitragVerfasst: Fr 18.03.11 16:11 
Access DBs sind alles andere als empfehlenswert (Ich hatte bei einem Projekt das wir übernommen hatten auch so nette Konstrukte, i.d.R kann man aber relativ gut von Access DBs auf MS SQL wechseln). Gibt es also keine Möglichkeit auf was gescheites auszuweichen? 100MDBs tönt jedenfalls nach einem falschen Ansatz, egal um was es geht :)

Ich hab eigentlich auch noch nie das Argument "weil es soo viele Daten sind braucht es mehere DBs" im MY/MS/SQL Umfeld gehört. Dann wären wir beim Thema Cluster, aber das wird wohl kaum der Fall sein wenn es aktuell mdbs sind user defined image
thas11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Sa 19.03.11 12:11 
Hi IsNull!

Gebe dir zu 100% recht, aber ist leider wie du schon richtig vermutet hat ein übernommenes projekt und im moment wird noch auf access bestanden :(
stendate
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.03.11 16:02 
user profile iconthas11 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo!

Hab inzwischen ziemlich fleißig gegoogelt und die Info gefunden, das Jet.OleDB ein Limit von maximal 64 Connections hat...
Kann man hier noch etwas machen oder ist bei 64 Connections für mich schluss ?


Mir ist noch was eingefallen, Du könntest versuchen eine leere Datenbank (z.B. A.mdb) zu erstellen, und darin alle Zieltabellen der Zieldatenbanken als verknüpfte Tabellen anzulegen. Die Connection aus dem .NET-Programm würde dann nur auf A.mdb zeigen.

Die über 100 Links kann man sicherlich auch von .NET aus per Schleife anlegen lassen (hab ich aber noch nie versucht). Die andere Variante wäre in A.mdb ein VBA-Modul und eine Config-Tabelle anzulegen, welches dann z.B. in einer Schleife durch eine Config-Tabelle folgendes abfreuert:

ausblenden Quelltext
1:
2:
3:
...
DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\FOO\BAR\DB001.mdb", 0, "tblTabelle001", "tblTabelle001", False, False
...


(Oder aber 100 Verknüpfungen her Hand mit Access selbst anlegen, ginge natürlich auch)

Ich bin mir nicht ganz sicher ob das das "64-Connection-Problem" wirksam umgehen kann, aber da ich nicht glaube dass wirklich in 100 Tabellen gleichzeitig geschrieben werden soll *und* da JET hierbei die nicht benötigten Connections auch wieder automatisch schließt, könnte das funktionieren.

Die Pfade zu den Ziel-MDBs können im übrigen auch UNC-Pfade sein, falls das im Netz liegen sollte. Dann leidet nur die Performance, aber laufen tut es.
thas11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 20.03.11 17:52 
Danke für die Hilfe!

Mein problem ist, dass ich natürlich nicht wirklich "gleichzeitig" in 100 Datenbanken schreiben muss. Da hab ich mich schlecht ausgedrücht.
Aber wenn ich beim schreiben immer eine Connection aufbauen bzw. abbauen muss ist dies ENORM zeitintensiv und daher wollte ich die 100 Connection glecihzeitig geöffnet
lassen damit ich mit das ständige öffnen/schließen sparen kann...

@stendate: Danke für den Hinweis!
Ich werds in den nächsten Tagen ausprobieren und geb euch dann bescheid wie es mir dabei ergangen ist! ;)

Danke & lg,
Wolfi