我有一个SQLite3
数据库,其中包含多项选择题。我可以在我的Android和iOS应用程序中快速轻松地使用此数据库。但是,我来写一个Windows Phone 8.1版本的应用程序,我发现这个过程要困难得多。
我已经为我的项目添加了几个包和引用。我已使用nuget
添加了两个包sqlite-net
和System.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)
我为数据库尝试了许多不同的文件路径,例如:
我是Windows Phone的新手,所以这可能是一个简单的修复,但如果有人能指出我正确的方向,我将非常感激。
答案 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];