这是不可能的。您可以做的是将数据库嵌入到您的 dll 项目中并将其转储到文件系统上的某个位置(可能是 AppData?)并从那里读取和写入。将 db 直接放在可执行文件(或 dll)中可能不是一个好主意,因为它除了在技术上不可行之外,还会增加应用程序的大小。
拥有一个可分发的可执行文件是我喜欢的口味问题。在你的情况下,但问题更多。这不仅仅是单独嵌入 db 文件,与之关联的 dll 呢?步骤是2:
1)将与您的数据库关联的必要dll(System.Data.SQLite
?)添加到您的项目中Embedded Resource
(不一定是 a Resource file
),并让系统自动解决程序集冲突。在这里抓住它怎么做。
2)现在将您的 db 文件添加到您Resources
的项目中(并提取它)
static void DumpDatabase()
{
var dbFullPath = Utility.GetDbFullPath(); //your path
if (File.Exists(dbFullPath))
return; //whatever your logic is
File.WriteAllBytes(dbFullPath, Properties.Resources.myDb);
}
甚至最好不要将数据库嵌入到您的项目中,而是编写逻辑以在您的应用程序中创建数据库。如果明天您需要更改 SQLite 的版本,比如从 3 到 4,该怎么办?使用第一种方法,您需要为自己创建一个数据库并将其重新嵌入到项目中。但是,如果您正在编写在应用程序中创建数据库的逻辑,那么更新 SQLite 版本只需更改 ADO.NET dll(代码保持不变)。可能是这样的:
static void DumpDatabase()
{
var dbFullPath = Utility.GetDbFullPath();
if (File.Exists(dbFullPath))
return; //whatever your logic is
CreateDb(dbFullPath);
}
static void Create(string dbFullPath)
{
SQLiteConnection.CreateFile(dbFullPath);
string query = @"
CREATE TABLE [haha] (.............)
CREATE TABLE ..............";
Execute(query);
}
并在连接字符串中添加FailIfMissing=False;