C#SQLite 3将文本字段读取为二进制数据

时间:2016-11-28 07:18:37

标签: c# select sqlite blob

在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文本字段作为二进制数据?

1 个答案:

答案 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();
    }