簡體   English   中英

如何讀取TEXT列並將其視為字節數組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM