2010-09-05 163 views
16

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

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

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

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

+0

我没有SQLLite(这就是为什么这不是一个答案),但你应该能够导出数据库模式和任何初始数据到SQL脚本文件。然后,您可以在安装时执行这些脚本来设置数据库。在更新架构时保持脚本更新。 – ChrisF 2010-09-05 21:35:09

+0

感谢Timwi的链接。 – Elisabeth 2010-09-07 18:16:32

回答

3

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

我会主张在您的代码中创建一个类,以便为应用程序和单元测试动态创建数据库模式。那么如果你改变了模式,你只需要在一个地方担心它,而不必处理不同步的事情(希望)。

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

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

+0

你怎么看待包括一个sqlite创建脚本到我的应用程序或应用程序更新的安装程序安装程序。这个脚本在用户创建一个新项目时执行。因此,只要我发布一个新版本创建一个文本文件并将我的表的所有创建表...复制到此文件中,我就必须做到这一点。 – Elisabeth 2010-09-06 17:37:29

+0

我使用的sqlite IDE可以轻松地将所有表及其结构转储为一个.sql文件所有的分号分隔,就像我需要它运行多个语句一个ExecuteNonQuery :) – Elisabeth 2010-09-06 17:54:03

0

对于一些协助,你可以看看我的一个朋友制作的公有领域项目: www.codeplex.com/publicdomain

随着吨其他有用的实用程序,看看Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables)。只需使用SQL作为数据库类型。

23

也许这将帮助:

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

类型名称_e后面的括号中的数字参数。 G。 “NVARCHAR(2048)”_被SQLite忽略; SQLite不强加任何长度限制。 – 2013-02-09 12:49:42

+0

你不应该硬编码你的路径。db'文件;它应该可以在安装时进行配置(尽管这并不意味着最终用户应该指定安装db的位置),特别是因为C#和sqlite是跨平台的。 – 2015-10-28 17:07:32

相关问题