Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Datentransfer von Datei nach SQL-Server und zurück
Oppi35 - Sa 15.09.12 08:02
Titel: Datentransfer von Datei nach SQL-Server und zurück
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 - Sa 15.09.12 09:12
Hallo Oppi35,
dann solltest du dir mal die Klasse
SqlBulkCopy [
http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqlbulkcopy.aspx] 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 - Sa 15.09.12 14:46
Th69 hat folgendes geschrieben : |
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 [
http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader].
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!