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

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

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

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

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

也许这会有所帮助:

SQLiteConnection.CreateFile("c:\\Ik.db"); 

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

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

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

我主张在您的代码中创建一个类,该类可以动态创建数据库模式以进行应用程序和unit testing。 然后,如果您更改架构,您只需要在一个地方担心它而不必处理不同步的事情(希望如此)。

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

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

如需一些帮助,您可以查看我的朋友制作的Public Domain项目: http://www.codeplex.com/publicdomain

与大量其他有用的实用程序一起,查看Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables) 。 只需使用SQL作为数据库类型。