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

图恩潘

在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章