2016-06-09 169 views
2

我有一個用C#編寫的Windows 10 UWP應用程序。我使用SQLite在本地存儲我的數據。我遇到的問題是該文件從不保存和/或使用此代碼檢索。它應該可以工作,但是我找不到什麼問題。SQLite不存儲/檢索數據庫

dbExists總是評估爲false,所以我在這裏錯過了什麼?

private SQLiteConnection localConn; 
private string dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "myDatabase.db"); 

public async void DBInit() 
{ 
    bool dbExists = false; 
    try 
    { 
     var store = await ApplicationData.Current.LocalFolder.GetFileAsync(dbPath); 
     dbExists = true; 
    } 
    catch { dbExists = false; } 
    if (!dbExists) 
    { 
     using (localConn = new SQLiteConnection(new SQLitePlatformWinRT(), dbPath)) 
     { 
      // Create table 
      localConn.CreateTable<MyTable>(); 
     } 
    } 
    else // CURRENTLY NOT FIRING!! 
    {} 
} 
+0

爲'dbExists'是'FALSE'此代碼段中是唯一的出路,如果'GetFileAsync'引發異常。你捕捉(吞嚥)的例外是什麼? – IInspectable

+0

你是如何在你的項目中包含你的'myDatabase.db'的?並在您的解決方案中的哪個項目? – Herdo

回答

2

請考慮使用下面的代碼來創建和訪問數據庫文件:

StorageFile notesFile = await storageFolder.CreateFileAsync(dbPath, CreationCollisionOption.OpenIfExists); 

,如果它不存在,它這將創建新的文件和檢索它的時候已經被創建。

請檢查我的博客文章中看到有關UWP數據存儲更: https://mobileprogrammerblog.wordpress.com/2016/05/23/universal-windows-10-apps-data-storage/

+0

標記爲答案。我假設SQLite自己管理文件創建。這是確認工作,非常感謝你! – Thomas

1

我認爲你缺少的代碼這一重要的一塊:

SQLiteConnection.CreateFile("mydatabase.sqlite"); 

做的是第一,然後創建一個連接引用(現在)創建的文件的實例。

另外,我建議你用.sqlite擴展名命名數據庫,這樣當團隊和傳入開發者的其餘部分,然後再查看數據庫文件工件時,可以立即知道這是一個sqlite數據庫。編輯: 該方法是一種靜態方法。所以,你會使用它像這樣...

 
using System.Data.SQLite; 

namespace sqlite_sample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SQLiteConnection.CreateFile("sample.db"); 
     } 
    } 
} 

下面就工作:

var conn = SQLiteConnection(...); 
conn.CreateFile(dbPath); //<-- static methods can't be invoked at the instance level... 
+0

原來並沒有一個CreateFile的SQLite連接方法。但是,我明白了這個要點。我絕對接受你的建議在文件名中的.sqlite擴展名。好的電話,謝謝。 – Thomas

+0

這是一個靜態方法,而不是一個實例方法......也許這是問題? – code4life