2014-07-02 38 views
3

我试图加载通用8.1应用程序中的现有数据库文件。将现有数据库加载到通用应用程序

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

,当我尝试使用此命令来打开数据库文件:

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

它创建一个新的空数据库。 (我的意思是,每个SELECT命令失败,并没有这样的表错误,所以它不是我的数据库,这是一个新的。)

此外,

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

抛出此异常:

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

我的test.db位于共享项目的根目录下,与Build Action设置为ContentCopy to Output Directory设置为If Newer

我不知道我在做什么错。你可以帮我吗?

  • 如果这是一个愚蠢的问题,请接受我的道歉,我是WinRT编程新手。

回答

3

有一个关于sqlite-net包装,这也适用于SQLitePCL这里的解决方案:http://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"); 

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

+0

您的问题和解决方案帮助了我很多......谢谢 –

+0

people.db的属性'Build Action'必须是'Content'。如果未设置,数据库不包含在应用程序中。 – Tonatio

+0

我应该在项目中放置“people.db”在哪里? ...我应该把它放在资产文件夹中,或者我应该为它创建一个自定义文件夹或者它应该放在根文件夹中?任何人都可以帮忙。 –

相关问题