将现有数据库加载到通用应用程序

3

我要尝试在一个通用的8.1应用程序中加载已有的数据库文件。

我安装了所有必需的软件包,并且我正在使用SQLitePCL封装。

当我尝试使用以下命令打开db文件时:

conn = new SQLiteConnection("test.db");

我正在创建一个新的空数据库。(我的意思是,每个SELECT命令都会失败并显示“没有这样的表”错误。所以这不是我的数据库,而是一个新的。)

此外,

conn = new SQLiteConnection("ms-appx:///test.db");

抛出此异常:

无法打开数据库文件:ms-appx:///test.db 详细信息:无法打开数据库文件

我的 test.db 文件位于 Shared 项目的根目录下,使用 Build Action 设置为 Content,并将 Copy to Output Directory 设置为 If Newer

我不确定哪里出了问题。您能帮助我吗?

  • 如果这是一个愚蠢的问题,请接受我的道歉,我刚开始学习 WinRT 编程。
1个回答

3
这里有一个关于sqlite-net包装器的解决方案,同样适用于SQLitePCLhttp://wp.qmatteoq.com/import-an-already-existing-sqlite-database-in-a-windows-8-application/ 总结一下,这些包装器会在LocalStorage文件夹中查找数据库。因此,在访问数据库之前,您需要将文件复制到LocalStorage中。
private async Task CopyDatabase()
{
    bool isDatabaseExisting = false;
 
    try
    {
        StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync("people.db");
        isDatabaseExisting = true;
    }
    catch
    {
        isDatabaseExisting = false;
    }
 
    if (!isDatabaseExisting)
    {
        StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("people.db");
        await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);
    }
}

之后,可以使用以下代码访问数据库:

conn = new SQLiteConnection("test.db");

然而,问题在于我会在手机中存储两个数据库文件实例。我不知道如何解决这个问题。有人能帮忙吗?


people.db 的属性 Build Action 必须设置为 Content。如果未设置,数据库将不会包含在应用程序中。 - Tonatio
我应该把"people.db"放在项目的哪里?...我应该把它放在Asset文件夹中,还是应该为其创建一个自定义文件夹?或者它应该放在根文件夹中?有人可以帮忙吗? - Zia Ur Rahman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接