如何解决SQLite数据库的错误路径?

概述 – 我添加了一些代码来将现有数据库复制到设备的本地文件夹。 到目前为止, 如果现有数据库尚不存在,则第一个条件正常。

问题 – 但是当执行将现有数据库从解决方案文件夹复制到设备文件夹的代码行时,我收到了SQLite错误。 该错误告诉我无法打开db文件。

在调试期间,我看到DBPath与我的解决方案中的文件位置相同。 所以我不太确定这条道路会出现什么问题。

(数据库作为内容附加,并设置为“始终复制”。)

包中db文件的完整路径是:

C:\Users\Brian\Documents\Visual Studio 2013\Projects\Parking Tag Picker WRT\Parking Tag Picker WRT\Databases\ParkingZoneDatabase.db 

问题 :如何将db路径解析为SQLite类所需的正确路径?

在此处输入图像描述

错误日志 – 在SQLite类中,抛出此exception的exception的确切转储如下:

 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"; ///  /// Load SQL_LiteTable from Solution ///  ///  ///  public async Task 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; } 

我还检查了db文件本身的权限,该文件设置为READ ONLY –

在此处输入图像描述

首先感谢回购。 问题是您指定的路径。
当你使用await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); ,这意味着您将所选数据复制到本地文件夹(不在数据库文件夹中),以将其复制到首先创建数据库文件夹所需的数据库文件夹中,然后将该文件复制到该文件夹​​中。
现在我给出了一个简单的解决方案,即对AppDBPath进行更改以修复错误。 此解决方案仅将数据库复制到本地文件夹,而不是复制到Database文件夹中

 public const string AppDBPath = @"ParkingZoneDatabase.db"; public const string PackageDBPath = @"Databases\ParkingZoneDatabase.db"; ///  /// Load SQL_LiteTable from Solution ///  ///  ///  public async Task Init() { bool isDatabaseExisting = false; try { StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(AppDBPath); isDatabaseExisting = true; } catch { isDatabaseExisting = false; } if (!isDatabaseExisting) { StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync(PackageDBPath); await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); } return true; } 

由于您使用AppDBPath作为数据库的参考,其余代码应该可以正常工作。