如何动态创建包含所有表的新SQLite数据库?

Eli*_*eth 16 c# sqlite file

当用户启动我的应用程序时,他或她可以创建一个新项目,这意味着创建一个包含所有表的新数据库.

我不想从较旧的数据库/项目中复制表的结构,因为在此期间,由于程序的更新,表可能已更改.这会导致崩溃.

因此,对于我部署的每个应用程序更新,我还应该部署一个创建数据库和表的脚本文件,对吧?

脚本文件应该是什么样的,如何在C#中调用它?

小智 22

也许这会有所帮助:

SQLiteConnection.CreateFile("c:\\Ik.db");
Run Code Online (Sandbox Code Playgroud)

动态创建一个新数据库并对其执行查询.查询应该是这样的:

CREATE TABLE IF NOT EXISTS [Setting](
[ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[Key] NVARCHAR(2048) NULL,
[Value] NVARCHAR(2048) NULL
);
Run Code Online (Sandbox Code Playgroud)

  • 括号中的数字参数,类型名称后跟_e.g."NVARCHAR(2048)"_被SQLite忽略; SQLite不会施加任何长度限制. (2认同)

Dav*_*ave 3

您可以编写一个脚本来完成这一切,但您也可以有一个单元测试项目来测试您的数据库接口。如果您这样做,那么您将希望能够创建一个仅包含用于测试的虚拟数据的测试数据库。基本上,我的观点是,如果您使用脚本文件来创建应用程序数据并且想要添加单元测试,那么您需要为它们提供另一个脚本文件,或者您需要在代码中创建数据库。

我建议在代码中编写一个类,该类可以为应用程序和单元测试动态创建数据库模式。然后,如果您更改架构,您只需在一处担心它,而不必处理不同步的事情(希望如此)。

由于您使用的是 SQLite 和 C#,因此我建议尝试一下SQLite.NET 。它让我的生活变得更加轻松,到目前为止我对此非常满意。

使用 SQLite.NET,您可以创建一个 SQLiteCommand,将其 CommandText 设置为“CREATE TABLE(此处为您的架构)”,然后调用 ExecuteNonQuery 来生成表。