Как управлять версиями файловых баз рабочего стола?

Как управлять изменениями базы данных при обновлении настольных приложений?

У нас есть база данных SQLite для одного из наших настольных приложений. Деинсталлятор сохраняет базу данных для использования при следующей установке. Но что, если у следующей установки будет обновленная версия? Как сохранить данные, но обновить таблицы?

Мы используем.NET и Linq2sql

2 ответа

Решение

Вот как я это делаю:

В моем коде я определяю версию базы данных

#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. Если они не совпадают, то база данных была создана другой версией программного обеспечения. Что будет дальше, зависит от того, что вам нужно. Как правило:

  • база данных была создана более новым программным обеспечением: сообщите пользователю и выйдите

  • база данных была создана более старым программным обеспечением, для которого существует обновление: предложите пользователю запустить код обновления или повторно инициализировать базу данных

  • база данных была создана старым программным обеспечением без обновления: предложите пользователю возможность повторно инициализировать базу данных или выйти.

Детали того, как работает код обновления, очень сильно зависят от того, что вам нужно. В общем, откройте старую базу данных И откройте новую пустую базу. Прочитайте старые таблицы, преобразуйте данные, как требуется, и запишите в новую базу данных. Закройте базы данных. Удалить старую БД. Переименуйте новый БД в стандартное имя БД. Откройте новый БД.

Если ничего другого, вывод echo .dump | sqlite my_database.sqlite разработано, чтобы быть чрезвычайно переносимым, даже к базам данных не SQLite.

Или, если я неправильно читаю ваш вопрос, вы можете изменить таблицу.

Другие вопросы по тегам