Как решить неправильный путь к базе данных SQLite?
обзор - Я добавил некоторый код для копирования существующей базы данных в локальную папку устройства. Пока первое условиеесли существующая БД еще не существует работает отлично.
вопрос - Но когда выполняется строка кода для копирования существующей базы данных из папки решения в папку устройства, я получаю ошибку SQLite. Ошибка говорит мне, что файл БД не может быть открыт.
Во время отладки я вижу, что DBPath совпадает с расположением файла в моем решении. Так что я не слишком уверен, что может быть не так с пути.
(БД прикреплена как контент и установлена на «всегда копировать».)
Полный путь к файлу db в пакете:
C:\Users\Brian\Documents\Visual Studio 2013\Projects\Parking Tag Picker WRT\Parking Tag Picker WRT\Databases\ParkingZoneDatabase.db
Вопрос: Как я могу разрешить путь БД в правильный путь, требуемый классом SQLite?
Журнал ошибок - Точный дамп исключения, которое выдается здесь, выглядит следующим образом в классе SQLite:
SQLite.SQLiteException was unhandled by user code
HResult=-2146233088
Message=Could not open database file: C:\Data\Users\DefApps\APPDATA\Local\Packages\6d00c25c-39d2-443f-a29b-2c30c8ce7e99_gevy8cezwa384\LocalState\Databases\ParkingZoneDatabase.db (CannotOpen)
Source=Parking Tag Picker WRT
StackTrace:
at SQLite.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)
at SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)
at Parking_Tag_Picker_WRT.Helpers.DatabaseHelper.ReadZones(String tableName)
at Parking_Tag_Picker_WRT.ViewModel.TagRequestViewModel.InitZoneInfoAsync()
at Parking_Tag_Picker_WRT.TagRequestPage.OnNavigatedTo(NavigationEventArgs e)
InnerException:
Код DBHelper: (код, который копирует существующую базу данных в локальную папку на устройстве)
public const string DBPath = @"Databases\ParkingZoneDatabase.db";
/// <summary>
/// Load SQL_LiteTable from Solution
/// </summary>
/// <param name="DBPATH"></param>
/// <returns></returns>
public async Task<bool> Init()
{
bool isDatabaseExisting = false;
try
{
StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(DBPath);
isDatabaseExisting = true;
}
catch
{
isDatabaseExisting = false;
}
if (!isDatabaseExisting)
{
//Fails at this line when retrieving the existing db
StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync(DBPath);
await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);
}
return true;
}
Я также проверил права доступа к самому файлу БД, которыйне установлен только для чтения -