Frage

Wir aktualisieren eine 15 Jahre alte Code-Basis, gibt es eine Anforderung einige einheimischen BCP-formatierte Daten-Dateien zu erstellen.

Im neuen System würden wir idealerweise Daten gerne nutzen in einem C # Datatable-Objekt die Datendatei in nativen BCP-Format zu erstellen.

dies getan werden kann und wenn ja, was ist der beste Ansatz wäre?

War es hilfreich?

Lösung

Nein, es kann nicht getan werden, nur so können wir nativen BCP-Dateien erstellen entdeckt haben, ist von SQL Server. Wenn jemand entwickelt oder einen anderen Weg findet es bitte hier posten!

Andere Tipps

Wenn es die alte, dann BCP Stück wie ein Sybase BCP Stück sehr viel aussehen kann. In Sybase würde ich beginnen bei Client libaries suchen und Beispiele für Codes mit BCP API ausgeliefert. CTLIB und / oder Java Gläser für die entsprechende API. Für Microsoft könnte es ein ähnlichen Teile der nativen C oder Basic API beteiligt BCP sein. Sie können den Kommunikationsteil von API nicht brauchen, nur aufzeichnen-by-Aufzeichnung vorbereitet und liest / schreibt. Datei

Wenn es nicht so etwas ist, dann würde ich prüfen, nicht-nativen Format mit der Hand gemacht FMT-Dateien und Text-wie Datendateien, produziert / konsumierte durch original BCP-Programm.

Es gibt eine ähnliche Art und Weise, dies zu tun, aber Sie haben SQLDMO zu verweisen, und es wird ein äquivalentes Format wie BCP zu erstellen. Durch die Verwendung der BulkCopy Aufgabe der SQLDMO, können Sie tun, was Sie suchen. Hier ist ein Link auf die Routine in Vbscript getan, die die SQLDMO-Bibliothek verwendet hier .

Hope, das hilft, Freundliche Grüße, Tom.

Sind Sie in der Lage, die Daten in der Datentabelle in einen Staging-Bereich auf einem SQL-Server zu setzen? Wenn ja, können Sie einen BCP-Prozess Laichen aus.

BCP: http://msdn.microsoft .com / en-us / library / aa174646% 28SQL.80% 29.aspx

Zum Beispiel verwende ich:

BCP Database.Schema.TableName OUT FileName.Ext -S ServerName -T -n

Schalter:

  • ES ist für Server
  • -T ist für vertrauenswürdige Verbindung
  • -n ist für Native-Format

EDIT + Neue Idee:

Wenn Sie den Zugriff auf die Abfragen, die die Datentabelle aufzufüllen, können Sie die mit BCP oder SQLDMO zu exportieren, um eine native Format-Datei verwenden. Die folgenden Abfragen verwenden, um die queryout Schalter anstelle des OUT-Schalter, weil sie Inline-Abfragen enthalten

Export bestimmte Spalten aus einer Ansicht:

BCP "SELECT Column1, Column2 FROM MyViewName" QUERYOUT FileName.Ext -S ServerName -T -n

Export bestimmte Spalten aus einem JOIN:

BCP "SELECT Table1.Column1, Table2.Column2 FROM Table1 INNER JOIN Table2 on Table1.Column33 = Table2.Column33" QUERYOUT FileName.Ext -S ServerName -T -n

vorausgesetzt, Sie nur mit Spaltentypen in der Zieltabelle festgelegt haben, nichts nullable, keine Unicode-Strings, und sind bereit, Bytereihenfolge zu handhaben, dann ist das native Dateiformat ist nur das Bytes der Typen.

i bulk kürzlich importierte Daten aus einer c # Skript durch eine Testdatei Byte-für-Byte-Schreiben und unter Verwendung von BCP

bcp destTable in model.raw -T -S _serverName -n

model.raw iscreated Byte-weise durch:

fileBytes = new byte[theLength * 4]; // * 4 bytes per element for int and float
var offset =0;

    foreach (var element in outputDimensions)
    {
        // fastCopy is a faster and "Unsafe" equivelent of BlockCopy , faster because it doesn't create an intermediate byte array.
        //Buffer.BlockCopy(BitConverter.GetBytes(profileid), 0, fileBytes, offset, 4);
        Utilities.fastCopy(profileid, fileBytes, offset);
        offset += 4;
        Utilities.fastCopy(element.index, fileBytes, offset);
        offset += 4;
        for (var i = 0; i < TimeSlices; i++, offset += 4)
        {
            float target = GetDataForTime(i,...);
            Utilities.fastCopy(target, fileBytes, offset); 
        }
    }

FileStream dataWriter.Write(fileBytes , 0, byteArray.Length);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top