无法在Visual Studio中使用SQLite打开/创建.db文件(UWP,C ++)

时间:2016-05-22 17:09:30

标签: visual-studio sqlite c++-cli uwp

我在Visual Studio 2015中创建了一个空白的通用应用程序,只为MainPage添加了一个按钮。然后,我为按钮创建了click事件处理程序:myButton_Click(...)。我有以下代码:

void MyTestApp::MainPage::myButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    sqlite3 *testDB;
    int result = sqlite3_open("file:///C:/Users/MyName/Downloads/testDB.db", &testDB);
    myButton->Content = result.ToString();
}

如您所见,我只是尝试创建一个新的db文件,并在按钮上显示sqlite3_open()函数的结果。不幸的是,我总是得到Code 14: SQLITE_CANTOPEN

在Visual Studio中,我通过工具安装了“SQLite for Universal Windows Platform” - &gt;扩展和更新。在解决方案资源管理器下,我将针对UWP的SQLite添加到参考文献中,还包括<sqlite3.h>标题。

我是否必须为应用分配任何特殊权限,以便它可以创建文件或我做错了什么?

2 个答案:

答案 0 :(得分:3)

默认情况下,UWP应用无法在自己的私人位置之外阅读 - 请参阅file access for UWP in MSDN

您可以使用StorageFile API访问私有存储区域之外的位置,但它们不适用于需要文件名的SQLite。除了首先将数据库复制到本地存储区域之外,目前无法执行此操作。

答案 1 :(得分:1)

随着彼得托尔的评论,它终于奏效了:

void MyTestApp::MainPage::myButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    Windows::Storage::StorageFolder^ f = Windows::Storage::ApplicationData::Current->LocalFolder;

    sqlite3 *testDB;
    int result = sqlite3_open_v2("C:/Users/MyName/AppData/Local/Packages/538ec661-2ebf-4c45-8845-3a4cb6afd397_4jdacjwc0e74a/LocalState/testDB.db", &testDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

    //This works too:
    //int result = sqlite3_open_v2("C:\\Users\\MyName\\AppData\\Local\\Packages\\538ec661-2ebf-4c45-8845-3a4cb6afd397_4jdacjwc0e74a\\LocalState\\testDB.db", &testDB, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);

    myButton->Content = result.ToString();
    //myButton->Content = f->Path;

    sqlite3_close(testDB);
}

testDB.db现在可在您在代码中看到的目录中找到。我之前尝试过类似的代码,但它没有用。标志SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE似乎有所不同......