如何在升级桌面应用程序时管理数据库更改?
我们有一个桌面应用程序的SQLite数据库。卸载程序使数据库保留在下次安装时使用。但是,如果下一次安装有更新版本怎么办?如何保存数据但升级表?
我们使用.NET和Linq2sql
答案 0 :(得分:1)
如果不出意外,echo .dump | sqlite my_database.sqlite
的输出设计为非常便携,即使是non-SQLite databases。
或者,如果我误解了您的问题,您可能需要alter table。
答案 1 :(得分:1)
我是这样做的:
在我的代码中,我定义了数据库的版本
#define DB_VERSION 2
每次我更改“中断”数据库的代码(对模式或db内容的语义进行不兼容的更改)时,此版本号都会递增
当代码创建新数据库时,它会执行此SQL命令
QueryFormat(L"PRAGMA SCHEMA_VERSION = %d;",DB_VERSION);
请注意,这必须是在执行了所有CREATE TABLE命令之后,否则sqlite会增加SCHEMA_VERSION。
当代码打开现有数据库时,它首先做的是
Query(L"PRAGMA schema_version;")
将从此查询返回的SCHEMA_VERSION与DB_VERSION进行比较。如果它们不匹配,则数据库由不同的软件版本创建。接下来会发生什么取决于您需要的细节。典型地:
数据库是由更新的软件创建的:通知用户并退出
数据库是由旧版软件创建的,其中有升级:提供用户选项以运行升级代码,或重新初始化数据库
数据库是由较旧的软件创建的,没有升级:提供用户选项以重新初始化数据库或退出。
升级代码如何工作的细节在很大程度上取决于您的需求。一般情况下打开旧数据库并打开一个新的空数据库。读取旧表,根据需要转换数据,然后写入新数据库。关闭dbs。删除旧的数据库。将新数据库重命名为标准数据库名称。打开新的数据库。