在SQLite数据库中,我有 fruit
表:
CREATE TABLE "fruit"
(
"fruit_id" INTEGER PRIMARY KEY,
"fruit_name" TEXT,
"data" TEXT,
"ex_data" BLOB
)
现在我想循环每一行并将 data
字段设为byte[]
数据:
string stm = "SELECT * FROM fruit";
using (SQLiteCommand cmd = new SQLiteCommand(stm, conn))
{
using (SQLiteDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["fruit_name"] as string == "banana")
{
var ex_data = (byte[])rdr["ex_data"];
var data = (byte[])rdr["data"]; // <------------------ Error Here
// Do something
}
else
{
// Do other things
}
}
}
}
虽然data
字段是文本类型,但是DB作者在其中存储二进制数据,所以我想将该值作为二进制数据返回。
我成功获得ex_data
,但无法获得data
,因为:
无法转换类型为&#39; System.String&#39;的对象输入&#39; System.Byte []&#39;
如果我在SQLite查看器中浏览表格,将data
字段的类型更改为BLOB
,我可以把它弄好,但由于某种原因我不想完全修改数据库。
我也试试:
var data = Encoding.ASCII.GetBytes(rdr["data"] as string);
返回不正确的数据。
问题:
如何将data
文本字段作为二进制数据?
答案 0 :(得分:0)
我自己终于找到了解决方案,但欢迎任何其他工作解决方案:
使用GetStream
方法:
byte[] h = null;
using (MemoryStream mm = new MemoryStream())
{
using (var rs = rdr.GetStream(rdr.GetOrdinal("data")))
{
rs.CopyTo(mm);
}
h = mm.ToArray();
}