Как управлять версиями файловой базы данных рабочего стола? - PullRequest
1 голос
/ 14 апреля 2011

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

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

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

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

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

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

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

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

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

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

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

1 голос
/ 14 апреля 2011

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

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

...