不能 open/create .db 文件与 Visual Studio 中的 SQLite (UWP, C++)
Can't open/create .db file with SQLite in Visual Studio (UWP, C++)
我在 Visual Studio 2015 年创建了一个空白的通用应用程序,并向 MainPage
添加了一个按钮。然后,我为按钮创建了点击事件处理程序: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"。在解决方案资源管理器下,我将 UWP 的 SQLite 添加到参考中,还包括 <sqlite3.h>
header.
我是否必须向应用程序分配任何特殊权限才能创建文件或者我做错了什么?
默认情况下,UWP 应用无法读取其自身私有位置之外的内容 - 请参阅 file access for UWP in MSDN。
您可以使用 StorageFile
API 访问您的私人存储区域之外的位置,但它们不适用于需要文件名的 SQLite。目前没有办法做到这一点,只能先将数据库复制到您的本地存储区域。
根据 Peter Torr 的评论,它终于奏效了:
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
有所作为...
我在 Visual Studio 2015 年创建了一个空白的通用应用程序,并向 MainPage
添加了一个按钮。然后,我为按钮创建了点击事件处理程序: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"。在解决方案资源管理器下,我将 UWP 的 SQLite 添加到参考中,还包括 <sqlite3.h>
header.
我是否必须向应用程序分配任何特殊权限才能创建文件或者我做错了什么?
默认情况下,UWP 应用无法读取其自身私有位置之外的内容 - 请参阅 file access for UWP in MSDN。
您可以使用 StorageFile
API 访问您的私人存储区域之外的位置,但它们不适用于需要文件名的 SQLite。目前没有办法做到这一点,只能先将数据库复制到您的本地存储区域。
根据 Peter Torr 的评论,它终于奏效了:
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
有所作为...