【问题标题】:Store byte[] in a SQLite Database and Select byte[] from SQLite Database [duplicate]将字节 [] 存储在 SQLite 数据库中并从 SQLite 数据库中选择字节 [] [重复]
【发布时间】:2013-02-25 09:43:35
【问题描述】:

我有一个 SQLiteDatabas,我想将我的 byte[] 存储在一个名为“Data”的字段中,此时我使用的 Datetype 称为:Blob,将 Byte 数组存储在 SQLiteDatabase 中的方法看起来像这个:

public bool InsertMessage()
{
    //create string SQl and fill it with the SQLite query for inserting a message.
    string SQL = "Insert into ClockMessages(InsertDateTime, SendDateTime, Data) Values('"+ insertdatetime + "', null, '" + data + "');";
    List<SQLiteParameter> pars = new List<SQLiteParameter>();
    pars.Add(new SQLiteParameter("InsertDateTime", insertdatetime));
    pars.Add(new SQLiteParameter("Data", data));
    //send the SQl query and it's parameters to the SQLiteDatabase class
    return SQLiteDatabase.ExecuteNonQuery(SQL, pars);
}

我的 SQLiteDatabase 中的字段 Data 字段现在包含以下文本:System.Byte[]

我想将真正的 byte[] 实际存储在数据库中,我该如何实现呢?数据字段是否需要另一个 DateType?

【问题讨论】:

  • 您是否将对象转换为字节数组,还是您的基础字节数组?
  • 我还没有转换任何东西,我想将完整的字节数组存储在 SQLite 数据库中,但如果需要我可以将字节数组缩减为单个字节,然后存储它们
  • 看起来好像有人已将您的问题标记为已回答,但我在此处找不到如何在数据放入后将数据从数据库中取回的示例。

标签: c# visual-studio sqlite bytearray


【解决方案1】:

你应该在语句中使用参数:

string SQL = "INSERT INTO ClockMessages(InsertDateTime, SendDateTime, Data) VALUES (@InsertDateTime, NULL, @Data)";

其他一切似乎都是正确的。

【讨论】:

    【解决方案2】:

    我会将字节数组转换为 base64 字符串并将其存储在 nvarchar(max) 字段中

    Convert.ToBase64String(byte[])

    http://msdn.microsoft.com/en-us/library/dhx0d524.aspx

    并通过 byte[] = Convert.FromBase64String 恢复它

    【讨论】:

    • 我使用的是 SQLite,所以我不能使用 nvarchar(max),我应该使用数据类型:TEXT 吗?
    • 抱歉,没看到 - 应该没问题,因此 SQLite 通常是 unicode 并且大小不受限制
    • 还原时出现以下错误:Base-64 字符数组或字符串的长度无效。你究竟是如何恢复的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2011-09-19
    • 2011-05-10
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多