从.NET中的字节流加载SQLite数据库

Eth*_*han 10 .net sqlite system.data.sqlite

我正在尝试加载一个SQLite数据库,该数据库将作为资源嵌入我的可执行文件中.对于那些好奇的人来说,这是因为我使用一个小的SQLite数据库来存储配置数据,并且我想发布嵌入在可执行文件中的默认配置(我讨厌必须随文件携带文件).

这只是默认配置.也就是说,我不需要修改此配置.它是静态的,在我的程序构建完成后无法更改.

我正在使用SQLite的System.Data.SQLite包装器.

我可以像这样访问字节流:

using (var stream =
          Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
    // use of "stream" here.
}
Run Code Online (Sandbox Code Playgroud)

但是,关于SQLiteConnection从此流创建对象,我感到很茫然.

简单的方法是在每次程序加载时简单地生成一个新的配置文件,然后告诉SQLite从该文件中读取.这可能会工作,但我想避免这种技术 - 我打算重用我解决这个问题还包括国际化的支持(其中每种语言是[压缩] SQLite数据库和默认语言嵌入可执行文件 - 一个用户可以添加其他语言,只需将其他语言数据库复制到程序的工作目录中).

我不关心在内存中保存这个数据库的内存成本.它会非常小(可能小于50 KiB),所以这不会打扰我.显然,如果这是一个更大的数据库,这可能是一个问题.

最后,我知道这可能被视为存储配置的一种糟糕方式.虽然我同意基于纯文本的解决方案适用于用户手动输入所有设置的情况,但这主要用于用户未明确定义的设置.例如,将各种停靠窗口的位置存储在应用程序中,或存储有关可能找到内部资源的位置的数据.

谢谢您的帮助.

Pet*_*lin 5

似乎此功能未在System.Data.SQLite提供程序中实现.您甚至无法将内存数据库保存到文件(即二进制格式),只能以SQL转储的形式保存.

因此,其中一个解决方案是存储用于在资源中创建数据库的SQL代码.然后在每次应用程序启动时在内存db中创建.