Probleme beim Importieren von BCP Dateien in eine SQL Server 2005 Datenbank? Gerade bei Produkten, welche die BCP Dateien über die Rechner Grenze hinaus importieren möchten (z.B. auf einen SQL Server auf einem anderen PC), tauchen immer wieder Probleme auf. So wird der Pfad im Bulk Copy Befehl vom SQL Server aus immer als Lokal interpretiert. Oder hatten Sie schon einmal Probleme mit dem Erstellen von BCP Dateien? Gerade mit Umlauten in Spalten oder gar Tabellen scheinen der BCP Import und Export nicht umgehen zu können. Es gibt aber eine vernünftige und sehr einfache Lösung für dieses Problem.
Das Konzept dahinter ist in wenigen Worten umschrieben. Ab dem .NET Framework 2.0 wird die Klasse SqlBulkCopy im Namespace System.Data.SQLClient mitgeliefert. Diese Klasse unterstützt den schnellen Massenimport von einem IDataReader, einer DataTable oder einem DataRow-Array. Ein Dataset kann mit einem einzigen Befehl in eine XML-Datei exportiert und später auch wieder importiert werden. Dies sind bereits die Fakten, welche Sie kennen müssen.
Sie mögen jetzt sagen: “XML? Diese Dateien enthalten doch sehr viel Müll!!!” Das dachte ich zuerst auch, doch dann habe ich es trotzdem ausprobiert – und die XML Dateien waren um einiges kleiner als die entsprechenden BCP Dateien!!!
Als erstes schreiben wir nun eine kleine Methode, welche für uns die entsprechenden XML Dateien exportiert:

Nachdem nun der Export erledigt ist, können wir uns voll dem Import widmen.

Und das war er auch schon der ganze Zauber. Die SqlBulkCopy Klasse bietet zudem noch einige schöne Optionen. Auch ist es möglich sich den Fortschritt als Event zurückgeben zu lassen. Eine weitere zusätzliche Verbesserung dieser Variante (vorallem bezüglich der Dateigrössen), wäre es nun noch, wenn die XML-Dateien während des Export Vorgang in eine ZIP Daten verpackt würden und analog dazu beim Export wieder entpackt.

