Wie man eine TEXT-Spalte liest und behandelt, ist als Byte-Array

Wir haben eine alte Foxpro-Anwendung mit einer function, die in C # umgewandelt werden muss.

Grundsätzlich ist alles, was es tut, eine XLS-file aus einer SQL server-databasetabelle zu lesen und sie auf der lokalen Disc zu speichern. Diese file dient als Excel-Arbeitsblattvorlage.

Die binären XLS-fileinformationen werden in einer TEXT Spalte gespeichert (was mich nervös macht) und wird über FoxPro mit dieser einzigen Zeile extrahiert:

 lnResult = SQLEXEC(THISFORM.Hconn, "select XExcell from MyTable", "xy") SELECT xy IF !EMPTY(xy.xExcell) AND !ISNULL(xy.xExcell) COPY memo xy.xExcell to (SomeFile) 

Das Problem ist, dass C # (oder zumindest der ADO-Befehl) die Spalte als String behandeln. Nun, das ist, was der Leser kommt, wenn ich einen ausführen

 MyADOCommand.ExecuteScalar(); 

Edit: Was ist eine implizite characterfolge und kann nicht zu einem Byte-Array gegossen werden.

Also, hier ist mein Problem: Die data sind in einer binären Form im SQL server und müssen gezogen und als rohes Byte-Array behandelt werden (und schließlich auf die Disc geschrieben werden, so dass es eine Erweiterung von .XLS und beten, dass Excel in der Lage ist lesen Sie die file).

Irgendeine Idee, wie man das erreicht? Der folgende Code funktioniert offensichtlich nicht

 var s=(string)cmd.ExecuteScalar(); var enc = new System.Text.ASCIIEncoding(); var template= enc.GetBytes(s); var fs = new FileStream(excelTemplateFile, FileMode.OpenOrCreate, FileAccess.Write); var bw = new BinaryWriter(fs); bw.Write(template); bw.Flush(); bw.Close(); fs.Close(); 

Ich habe auch versucht, die TEXT Spalte als IMAGE zu casting, aber das funktioniert auch nicht (SQL server beschwert sich, dass es nicht konvertieren kann). Ich weiß, das Problem ist die Tatsache, dass ein Text (eine characterfolge von character) ist kein Stream von Bytes, aber wenn FoxPro kann es tun, C # sollte auch in der Lage sein, nein?

Edit: Der Inhalt ist ca. 3MB groß.

Ändern Sie die SQL-Abfrage, um die Spalte auf varbinary wie folgt zu casting:

 select cast(cast(XExcell as varchar(max)) as varbinary(max)) from MyTable 

Dann:

 var bytes = (byte[])cmd.ExecuteScalar(); using (var writer = new BinaryWriter(File.Open("your file name", FileMode.Create))) { writer.Write(bytes); } 

EDIT: Doppelguss TEXT -> varchar (max) -> varbinary (max), da direktes Gießen von TEXT -> varbinary (max) nicht erlaubt ist