#c# #sqlite #windows-runtime #windows-8.1 #win-universal-app
#c# #sqlite #windows-среда выполнения #windows-8.1 #win-universal-app
Вопрос:
Я пытаюсь загрузить существующий файл базы данных в универсальное приложение 8.1.
Я установил все необходимые пакеты, и я использую SQLitePCL
оболочку.
когда я пытаюсь открыть файл db с помощью этой команды:
conn = new SQLiteConnection("test.db");
Это создает новую пустую базу данных. (Я имею в виду, что каждая SELECT
команда завершается ошибкой без такой таблицы. Итак, это не моя база данных, это новая.)
Также,
conn = new SQLiteConnection("ms-appx:///test.db");
выдает это исключение:
Не удается открыть файл базы данных: ms-appx:///test.db Подробности: не удается открыть файл базы данных
мой test.db находится в корне общего проекта, для которого Build Action
установлено значение Content
и Copy to Output Directory
установлено значение If Newer
.
Я не уверен, что я делаю неправильно. Вы можете мне помочь?
- Пожалуйста, примите мои извинения, если это глупый вопрос, я новичок в программировании WinRT.
Ответ №1:
Существует решение о sqlite-net
оболочке, которое также работает для SQLitePCL
здесь: http://wp.qmatteoq.com/import-an-already-existing-sqlite-database-in-a-windows-8-application /
Суть в том, что эти оболочки ищут базу данных внутри LocalStorage
папки. Поэтому вам нужно будет скопировать файл в LocalStorage
перед доступом к базе данных.
private async Task CopyDatabase()
{
bool isDatabaseExisting = false;
try
{
StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync("people.db");
isDatabaseExisting = true;
}
catch
{
isDatabaseExisting = false;
}
if (!isDatabaseExisting)
{
StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("people.db");
await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);
}
}
После этого база данных будет доступна с помощью этой строки кода:
conn = new SQLiteConnection("test.db");
Однако проблема в том, что у меня будет два экземпляра файла базы данных, хранящихся в телефоне. Я не знаю, как это решить. Кто-нибудь может помочь?
Комментарии:
1. Свойство
Build Action
ofpeople.db
должно бытьContent
. Если она не установлена, база данных не включается в приложение.2. Куда я должен поместить свой «people.db» в проекте? … Должен ли я поместить его в папку активов, или я должен создать для него пользовательскую папку, или его следует поместить в корневую папку? любой может помочь, пожалуйста.