在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
字段是typeof文本,但是DB作者将二进制数据存储在其中,因此我想取回该值作为二进制数据。
我成功获得了ex_data
,但data
由于以下原因而无法获得:
无法将类型为“ System.String”的对象转换为类型为“ System.Byte []”的对象
如果我在SQLite Viewer中浏览表,将data
字段的类型更改为BLOB
,则可以正常使用,但是由于某种原因,我根本不想修改数据库。
我也尝试:
var data = Encoding.ASCII.GetBytes(rdr["data"] as string);
返回错误的数据。
问题:
如何获取data
文本字段作为二进制数据?
我终于找到了自己的解决方案,但也欢迎使用其他任何工作解决方案:
使用GetStream
方法:
byte[] h = null;
using (MemoryStream mm = new MemoryStream())
{
using (var rs = rdr.GetStream(rdr.GetOrdinal("data")))
{
rs.CopyTo(mm);
}
h = mm.ToArray();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句