sqliteconnection - sqlite3 c#



如何解決SQLite數據庫的不正確的路徑? (1)

概述 - 我已經添加了一些代碼將現有的數據庫複製到設備的本地文件夾。 到目前為止, 如果現有的數據庫尚不存在的第一個條件工作正常。

問題 - 但是當執行從解決方案文件夾複製現有數據庫到設備文件夾的代碼行時,出現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;          
    }

我也檢查了數據庫文件本身沒有設置為只讀的權限 -


首先感謝回購。 問題是你指定的路徑。
當你使用await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); ,這意味著您要將選定的數據複製到本地文件夾(不在數據庫文件夾內)以將其複製到數據庫文件夾中,您需要先創建一個數據庫文件夾,然後將該文件複製到該文件夾中。
現在我正在給你一個簡單的解決方案來修改你的AppDBPath來修復錯誤。 此解決方案將數據庫複製到您的本地文件夾而不是數據庫文件夾內。

public const string AppDBPath = @"ParkingZoneDatabase.db";
public const string PackageDBPath = @"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(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作為您的數據庫的參考其餘代碼應完美。





local-storage