我们有一个古老的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 ... –