2016-06-09 170 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