c# sqlite - 从数据库中检索 BLOB 文本
c# sqlite - Retrieve BLOB text from database
我有一个带有单个 table(当前)和 4 列的 sqlite 数据库:
Name //TEXT
Quote //TEXT
ImageURL //TEXT, an online image
Entry //Text BLOB, I want to parse and store this as a List<Entry>
我做了一些创建文本文件、解析和存储数据以及删除文件的方法。数据以这种格式存储:
$"{Index} {Time} {Date} {URL}" // "1 00:00.0 9/13/1985 www.whosebug.com"
...这样,拆分此字符串并将其存储在我的容器 class、Entry
中会更容易。这些文件的大小平均为 250 字节,因此数据库内存很可能永远不会成为问题。
这是连接到我的 table 中的列数据的 classes:
public abstract class BaseClass
{
public abstract string Name {get; set;}
public abstract string ImageURL {get; set;}
public List<Entry> Records {get; private set;} //I already know .Add() is exposed, this problem has been fixed however.
...
}
public class DerivedClass : BaseClass
{
public override string Name {get; set;}
public override string ImageURL {get; set;}
public string Quote {get; set;}
...
}
我在过去几天看到的解决方案涉及不同语言 and/or BLOB 类型,其中 none 同时使用 Dapper、Sqlite 和 C#。
到目前为止我有什么 returns 一个 List<DerivedClass>
包含一个元素,该元素连接到我上面显示的派生 class 中的属性。除了 BLOB 之外的所有东西,就是这样。
public static ClassType GetSingleRow(string primaryKey) where ClassType : BaseClass
{
using (IDbConnection connection = new SQLiteConnection(LoadConnectionString()))
{
string sql = $"SELECT * FROM {typeof(ClassType).Name} WHERE Name = \"{primaryKey}\""; //probably vulnerable to sql injection but I'll worry about it later
var output = connection.Query<ClassType>(sql, new DynamicParameters());
//how would get a BLOB from this ienumearable?
return output.ToList()[0]
}
}
重申一下,我如何使用 Dapper 从我的 sqlite 数据库中检索 BLOB 文本?我需要使用字节数组检索它吗?如果是这样,我该怎么做?
好吧,在我准备 post 这个问题之前,我想,“为什么我不做另一个 属性 叫做“入口”,这样 Dapper 就可以完成剩下的为我工作。我最初将其设为 string
,但在获得 InvalidCastException
后我将其更改为 byte[]
public class DerivedClass : BaseClass
{
public override string Name {get; set;}
public override string ImageURL {get; set;}
public string Quote {get; set;}
public byte[] Entry {get; set;}
...
}
然后在Main()
,我可以做到
Console.WriteLine(System.Text.Encoding.Default.GetString(DerivedClassObject.Entry));
使用我解析文本文件的方法,我可以轻松地将其存储在我的 List<Entry>
class.
中
我有一个带有单个 table(当前)和 4 列的 sqlite 数据库:
Name //TEXT
Quote //TEXT
ImageURL //TEXT, an online image
Entry //Text BLOB, I want to parse and store this as a List<Entry>
我做了一些创建文本文件、解析和存储数据以及删除文件的方法。数据以这种格式存储:
$"{Index} {Time} {Date} {URL}" // "1 00:00.0 9/13/1985 www.whosebug.com"
...这样,拆分此字符串并将其存储在我的容器 class、Entry
中会更容易。这些文件的大小平均为 250 字节,因此数据库内存很可能永远不会成为问题。
这是连接到我的 table 中的列数据的 classes:
public abstract class BaseClass
{
public abstract string Name {get; set;}
public abstract string ImageURL {get; set;}
public List<Entry> Records {get; private set;} //I already know .Add() is exposed, this problem has been fixed however.
...
}
public class DerivedClass : BaseClass
{
public override string Name {get; set;}
public override string ImageURL {get; set;}
public string Quote {get; set;}
...
}
我在过去几天看到的解决方案涉及不同语言 and/or BLOB 类型,其中 none 同时使用 Dapper、Sqlite 和 C#。
到目前为止我有什么 returns 一个 List<DerivedClass>
包含一个元素,该元素连接到我上面显示的派生 class 中的属性。除了 BLOB 之外的所有东西,就是这样。
public static ClassType GetSingleRow(string primaryKey) where ClassType : BaseClass
{
using (IDbConnection connection = new SQLiteConnection(LoadConnectionString()))
{
string sql = $"SELECT * FROM {typeof(ClassType).Name} WHERE Name = \"{primaryKey}\""; //probably vulnerable to sql injection but I'll worry about it later
var output = connection.Query<ClassType>(sql, new DynamicParameters());
//how would get a BLOB from this ienumearable?
return output.ToList()[0]
}
}
重申一下,我如何使用 Dapper 从我的 sqlite 数据库中检索 BLOB 文本?我需要使用字节数组检索它吗?如果是这样,我该怎么做?
好吧,在我准备 post 这个问题之前,我想,“为什么我不做另一个 属性 叫做“入口”,这样 Dapper 就可以完成剩下的为我工作。我最初将其设为 string
,但在获得 InvalidCastException
byte[]
public class DerivedClass : BaseClass
{
public override string Name {get; set;}
public override string ImageURL {get; set;}
public string Quote {get; set;}
public byte[] Entry {get; set;}
...
}
然后在Main()
,我可以做到
Console.WriteLine(System.Text.Encoding.Default.GetString(DerivedClassObject.Entry));
使用我解析文本文件的方法,我可以轻松地将其存储在我的 List<Entry>
class.