# File in Datenbank speichern mittels C#



## CSharrp_Hilfe (7. Jan 2010)

Hallo zusammen,

ich versuche gerade eine txt File in eine Datenbank SQL Server zuspeichern und gehe zur Zeit so vor...zur Info: das textFile besteht aus über 24000 Zeilen und in einer Zeile befinden sich 17 Wörter, die durch ein Leerzeichen getrennt sind.

Meine Vorgehensweise:
1: Ich lese jede Zeile aus dem txt File ein und speicher die Strings in einem Array
2: dann öffne ich die DB und speicher die Werte aus dem Array in der Datenbank und schließe die DB wieder
3: dann lese ich die nächste Zeile aus dem txt File ein und speicher die Strings erneut in einem Array....dann wird wieder die Datenbank geöffnet, die Werte gespeichert und die DB geschlossen.

Dieser Ansatz funktioniert auch, jedoch kommt mir das etwas ineffizient vor.
Wäre es besser zuerst das gesamte File einzulesen und die Werte in einer Collection z.B. List zu speichern und dann die DB einmal öffnen und alle Werte auf einmal einzufügen?

Oder welcher Ansatz wäre hier der beste und schnellste...das Speichern dauert jetzt bei über 24000 Zeilen doch etwas.

oder kann ich meinen Ansatz so lassen?

Danke für eure Infos.


----------



## Tobias (7. Jan 2010)

24.000-mal eine DB-Connection zu öffnen und zu schließen ist vermutlich sehr ineffizient. Ich würde versuchen, da zumindest größere Blöcke, eventuelle auch alle Zeilen auf einmal zu übertragen.


----------



## maki (7. Jan 2010)

Stichworte: Transaktion, Transaktionsgröße


----------



## willIam (10. Feb 2010)

Also ich würde wie folgt vorgehen:

1. TextDatei öffnen
2. DB Connection öffnen
2. TextDatei zeilenweise einlesen
3. Jede Zeile sofort, ohne Zwischenspeicherung in ein Array in die DB schreiben (außer du brauchst die Daten sonst noch)
4. TextDatei schließen
5. DB Connection schließen

Die DB Connection würde ich mit einer eigenen Klasse schreiben, die dann als Singleton-Pattern realisiert ist. Dh. es wird im gesamten Projekt maximal eine Verbindung aufgebaut und geschlossen.

Wünderschön wäre das dann vielleicht noch in einem Thread im Hintergrund.......


----------

