2011-04-14 79 views
1

如何在升级桌面应用程序时管理数据库更改?如何管理桌面文件数据库版本?

我们有一个适用于我们桌面应用程序的SQLite数据库。卸载程序保持数据库被下一次安装使用。但是如果下一次安装有更新版本呢?如何保持数据但升级表?

我们使用.NET和LINQ2SQL

回答

1

这是我如何做到这一点:

在我的代码定义数据库

#define DB_VERSION 2 

此版本号递增每一次的版本我做出改变的代码,“游”数据库(使得对模式不兼容的变化或的分贝内容的语义)

当代码创建一个新数据库,它执行该SQL命令

QueryFormat(L"PRAGMA SCHEMA_VERSION = %d;",DB_VERSION); 

请注意,这必须在执行完所有CREATE TABLE命令之后,否则sqlite将增加SCHEMA_VERSION。

当代码打开现有的数据库,它所做的第一件事是

Query(L"PRAGMA schema_version;") 

是从该查询返回的SCHEMA_VERSION与DB_VERSION比较。如果它们不匹配,那么数据库是由不同的软件版本创建的。接下来会发生什么取决于你需要的细节。典型:

  • 数据库由较新的软件发布:通知用户,并出口

  • 数据库由旧版软件创建的其中有一个升级:提供用户选项来运行升级代码,或再 - 初始化数据库

  • 数据库由较旧的软件创建,无需升级:提供用户选项以重新初始化数据库或退出。

升级代码的工作原理很大程度上取决于您的需求。通常打开旧数据库并打开一个新的空数据库。读取旧表,根据需要转换数据,并写入新数据库。关闭dbs。删除旧的分贝。将新数据库重命名为标准数据库名称。打开新的数据库。

1

如果不出意外,中echo .dump | sqlite my_database.sqlite输出的设计是非常便携,甚至non-SQLite databases。或者,如果我误解了你的问题,你可能需要alter table

+0

是的,我知道启用迁移的工具。我想知道更多关于我可以遵循哪些准则以避免痛苦的迁移。如果有工具可以使这个过程比编写一切脚本更容易。 – 2011-04-14 13:18:29