Windows Phone 8.1:打开现有的SQLite3数据库

时间:2014-12-29 21:45:10

标签: windows-phone-8 sqlite

我有一个SQLite3数据库,其中包含多项选择题。我可以在我的Android和iOS应用程序中快速轻松地使用此数据库。但是,我来写一个Windows Phone 8.1版本的应用程序,我发现这个过程要困难得多。

我已经为我的项目添加了几个包和引用。我已使用nuget添加了两个包sqlite-netSystem.Data.SQLite,我还添加了对SQLite for Windows Phone 8.1的引用。

我已将数据库文件放入项目的Assets文件夹中。它被称为questionsDb.db。我已将其构建操作属性更改为content,并将选项设置为always copy

我写了以下模型类:

using SQLite;

namespace MyApp
{
class Question
{


    [PrimaryKey,AutoIncrement]
    public int _id { get; set; }

    [Indexed]
    public string question { get; set; }
    public string answer { get; set; }
    public string incorrect1 { get; set; }
    public string incorrect2 { get; set; }
    public string incorrect3 { get; set; }
    public int difficulty { get; set; }
}
} 

然后,我有以下代码,用于打开数据库并选择第一个问题:

var db = new SQLite.SQLiteConnection( ApplicationData.Current.LocalFolder.Path + "\\questionsDb.db");
Question q = new Question();
q = db.Query<Question>("select * from questions where _id = 1")[0];

当我运行此代码时,SQLite会尝试打开数据库,但我收到一条错误消息:

Additional information: Could not open database file: C:\Data\Users\DefApps\APPDATA\Local\Packages\3697fbe8-2d3f-455f-ad78-2bce9035bd82_gd9wj2p7c52jg\LocalState\questionsDb.db (CannotOpen)

我为数据库尝试了许多不同的文件路径,例如:

  1. questionsDb.db
  2. 资产\ questionsDb.db
  3. ApplicationData.Current.LocalFolder.Path +“\ Assets \ questionsDb.db”
  4. 我是Windows Phone的新手,所以这可能是一个简单的修复,但如果有人能指出我正确的方向,我将非常感激。

1 个答案:

答案 0 :(得分:2)

将构建操作的文件设置为“内容”,将其复制到应用程序的文件夹中。因此,您需要将数据库复制到appdata文件夹。

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///questionsDb.db"));
// You can open the file now, using file.Path, but files in the app's folder are read-only
// so you better to copy it to the local storage
var copiedFile = await file.CopyAsync(ApplicationData.Current.LocalFolder);
// Now you can open the database
var db = new SQLite.SQLiteConnection(copiedFile.Path);
Question q = new Question();
q = db.Query<Question>("select * from questions where _id = 1")[0];