1.3k Aufrufe
Gefragt in Datenbanken von
Hallo Experten,

ich greife mit einem C#-Programm (VS 2013) auf eine Access-DB
(.accdb) zu, die auf einem Netzlaufwerk liegt. Wenn ich mein
Programm starte, dauert es beim ersten Mal sehr, sehr lange, es
scheint, als würden sämtliche Daten gelesen.

In dem Programm gibt es zur Zeit zum Testen nur einen einzigen
Button mit dem Anhand einer Eingabe (PLZ) in einem Textfeld der
entsprechende Ort in der DB gesucht und in einem weiteren Textfeld
ausgegeben wird. Also starte ich zum ersten Mal dauert es nach
Klicken des Buttons Minuten, bis ein Ergebnis kommt, ab dem
zweiten Mal Bruchteile von Sekunden. Die DB ist - zum Testen nur
mit einem Teil der Daten - ca. 125 MB groß und hat eine Tabelle mit
ca. 150.000 Datensätzen, die eigentliche/komplette DB hat ca. 1 GB.

Habt ihr eine Idee, wie ich beim Starten des Programms bzw. Klicken
des Buttons verhindern kann, dass alles gelesen wird, sondern nur
die selektiv benötigen Daten/Spalten?

Danke schon vorab für jeden Tipp!

3 Antworten

0 Punkte
Beantwortet von
Hallo torillo,

normalerweise sollte das Durchsuchen des PLZ-Feldes (Zahlenfeld) bei 150.000 Datensätzen nicht so lange dauern, zumindest wenn es sich um ein Heimnetzwerk handelt.
Für das Durchsuchen des Zahlenfeldes ist ein Button nicht unbedingt. erforderlich.

Warum das Starten der Datenbank so lange dauert, kann ich mir aus der Ferne nicht vorstellen.

Gruß
Paul1
0 Punkte
Beantwortet von halfstone Profi (18.1k Punkte)
Hi torillo,

ich greife mit einem C#-Programm (VS 2013) auf eine Access-DB
(.accdb) zu, die auf einem Netzlaufwerk liegt. Wenn ich mein
Programm starte, dauert es beim ersten Mal sehr, sehr lange, es
scheint, als würden sämtliche Daten gelesen.


Das klingt ein wenig so, als ob deine C# Routine die Datenbankdatei erst mal übers Netz holt und dann damit arbeitet.
Das würde auch erklären warum es beim zweiten Mal dann sehr schnell geht, da die Datei dann schon im RAM oder auf der Platte deines lokalen Rechners liegt.

Um dieses Problem zu umgehen müsste man wissen was es mit dem Netzlaufwerk auf sich hat. Ist das der Rechner auf dem dann auch Access läuft?

Wie greifst du denn auf die DB zu, dafür gibt es ja auch verschiedene Methoden.

Gruß Fabian
0 Punkte
Beantwortet von
Hallo und danke für das Feedback!

@paul1: das Durchsuchen bzw. Ergebnis ausgeben dauert ja nur
beim ersten Mal, also beim Öffnen bzw. erstmaligen Klicken des
Buttons so lange. Ab dem zweiten Mal geht´s schnell. Vermutlich aus
dem Grund, wie es in der zweiten Antwort beschrieben wird von
halfstone

@halfstone: ich denke auch, dass es so ist, also DB beim Öffnen
bzw. der "ersten Aktion" komplett über´s Netzwerk in den lokalen
RAM/auf die lokale HDD packen. Die Frage ist, wie sich das
verhindern läßt?!?

Das Netzlaufwerk ist ein Fileserver-Netzlaufwerk, d. h. die Access-
DB liegt auf dem Server (auf dem kein Access läuft) und das C#-Tool
liegt lokal auf dem PC. Zugriff erfolgt entweder direkt im
Firmennetzwerk, also mit dem PC in der Firma bzw. von zu Hause
über eine VPN (wobei hier noch erschwerend hinzu kommt, dass zu
Hause meist nur eine 16 Mbit-Leitung vorhanden ist).

Verbindung zur DB erfolgt wie folgt:

InitializeComponent();
String dbConnect = "Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=plz.accdb";
con = new OleDbConnection(dbConnect);
con.Open();
sql = con.CreateCommand();


Danke euch für die Unterstützung!
...