[英]How to read a TEXT column and treat is as byte array
我們有一個古老的foxpro應用程序,其功能必須轉換為C#。
基本上,它只是從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 Server抱怨它無法轉換)。 我知道問題是文本(一串字符)不是字節流,但如果FoxPro可以做到,C#應該也能,不是嗎?
編輯:內容大約3MB。
更改SQL查詢以將列強制轉換為varbinary,如下所示:
select cast(cast(XExcell as varchar(max)) as varbinary(max)) from MyTable
然后:
var bytes = (byte[])cmd.ExecuteScalar();
using (var writer = new BinaryWriter(File.Open("your file name", FileMode.Create)))
{
writer.Write(bytes);
}
編輯:雙重轉換TEXT - > varchar(max) - > varbinary(max),因為不允許從TEXT直接轉換 - > varbinary(max)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.