我們有一個古老的foxpro應用程序,其功能必須轉換爲C#。如何讀取TEXT列並將其視爲字節數組
基本上,它所做的只是從SQL Server數據庫表中讀取XLS文件並將其保存在本地光盤上。該文件充當Excel工作表模板。
二進制XLS文件信息被存儲在一個TEXT
柱(這使我緊張),並通過FoxPro中提取與該單線:
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)
的問題是,C#(或至少ADO命令)將該列視爲字符串。那麼這就是讀者在執行時遇到的問題
MyADOCommand.ExecuteScalar();
編輯:這是一個隱式字符串,不能被轉換爲字節數組。
所以,這裏是我的問題:數據是在SQL Server中的一些二進制形式,必須被拉和視爲一個原始字節數組(並最終寫入光盤,給它一個.XLS
的延伸並祈禱Excel能夠讀取文件)。
任何想法如何實現這一目標?下面的代碼顯然是行不通的
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();
我也試着投了TEXT
列作爲IMAGE
,但是,這並不工作,要麼(SQL服務器抱怨說,它不能轉換)。我知道問題在於文本(字符串)不是字節流,但如果FoxPro可以這樣做,C#應該也可以,不是嗎?
編輯:內容大約3MB大。
是否有一個令人信服的理由,您不能只使用var s =(byte [])cmd.ExecuteScalar();'?你已經嘗試過了嗎? –
是的,我有。對不起,我沒有提到它。這會導致運行時錯誤,因爲查詢返回的字符串無法轉換爲字節數組。 – alzaimar
>二進制XLS文件信息存儲在文本列中 Shudder ... –