2011-04-14 76 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