[英]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.