Autor Beitrag
Oppi35
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95
Erhaltene Danke: 3



BeitragVerfasst: Sa 15.09.12 08:02 
Hallo Zusammen,

ich möchte eine hohe Anzahl an Datensätzen (über 1 Mio. Datensätze mit ca. 100 Spalten) aus einer CSV-Datei in den SQL Server bringen. Den Weg, den ich bisher gegangen bin ist folg.:
CSV-Datei in Entitäten im Arbeitsspeicher laden -> alle Daten mit einer Abfrage zum SQL-Server exportieren

Bei der Arbeit haben wir teilweise noch sehr alte Rechner im Einsatz. Von daher kam es mit zunehmender Datensatzanzahl in den Abfragen zuletzt häufiger zu Speicherüberlastungen. Grund ist, dass alle Datensätze erst in den Arbeitsspeicher geladen werden.

Ich würde jetzt gerne jeden Datensatz einzeln behandeln. Das heißt, erster Datensatz einlesen->Datensatz zum SQL-Server schreiben, Datensatz aus dem Speicher entfernen und den nächsten Datensatz einlesen.

Das gleiche übrigens auch umgekehrt, also Daten aus dem SQL-Server in z.B. eine CSV-Datei.

Ich wollte jetzt nicht anfangen, einfach jeden Datensatz mit "INSERT INTO..." einzeln zu schreiben. 1 Mio. Abfragen abzuschicken ist event. auch nicht der beste Weg.

Weiß jemand, wie man dieses Problem am Besten behandeln kann?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 15.09.12 09:12 
Hallo Oppi35,

dann solltest du dir mal die Klasse SqlBulkCopy ansehen. Die Datenquelle (d.h. bei dir die CSV-Datei) müßte dann jedoch mithilfe der IDataReader-Schnittstelle gelesen werden (also z.B. mittels OLEDB).
Dies geht jedoch nur in Richtung SqlServer, für das Auslesen würde ich dann doch einfach einen SqlDataReader verwenden und in einer Schleife dann die einzelnen Spalten in eine CSV-Zeile schreiben (mit GetValue(s)).
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 15.09.12 14:46 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Die Datenquelle (d.h. bei dir die CSV-Datei) müßte dann jedoch mithilfe der IDataReader-Schnittstelle gelesen werden (also z.B. mittels OLEDB).
GetValue(s)).


Ich würde den LumenWorks Reader nehmen. Der ist viel schneller und von der Handhabung einfacher als OLEDB.Guckst du hier.

_________________
Gruß
Christoph