我正在尝试加载一个SQLite数据库,该数据库将作为资源嵌入我的可执行文件中。对于那些好奇的人来说,这是因为我使用一个小型的SQLite数据库来存储配置数据,并且我希望在可执行文件内嵌入默认配置(我讨厌随程序携带文件)。
这只是默认配置。也就是说,在构建我的程序之后,我不需要修改此配置。它是静态的,不能更改。
我正在使用System.Data.SQLite包装器来使用SQLite。
我可以像这样访问字节流:
using (var stream =
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
// use of "stream" here.
}
不过,我在创建一个SQLiteConnection
对象时遇到了困难。
简单的方法是每次程序加载时生成一个新的配置文件,然后告诉SQLite从该文件中读取。这可能会起作用,但我想避免使用这种技术 - 我计划重用我的解决方案来包括国际化支持(其中每种语言都是[压缩的]SQLite数据库,而默认语言嵌入在可执行文件中 - 用户可以通过将其他语言数据库复制到程序的工作目录中添加其他语言)。
我不关心在内存中保存此数据库的内存成本。它将非常小(可能少于50 KiB),所以这并不令我烦恼。显然,如果这是一个更大的数据库,这可能是个问题。
最后,我意识到这可能被视为存储配置的一种差劲方式。虽然我同意基于纯文本的解决方案很好,适用于用户手动输入所有设置的情况,但这主要用于存储用户没有明确定义的设置。例如,在应用程序中存储各种停靠窗口的位置,或者存储有关内部资源可以在哪里找到的数据。
谢谢您的帮助。