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

时间:2010-09-05 21:26:38

标签: c# sqlite file

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

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

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

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

3 个答案:

答案 0 :(得分:22)

也许这会有所帮助:

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
);

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:0)

对于某些帮助,您可以查看我的一位朋友制作的Public Domain项目:  www.codeplex.com/publicdomain

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