3

我正在开发一个 Metro ui 应用程序,我想将 SQLite 用于一些内部数据而不是 JET,以便利用一些已经编写的代码。

但是,当我尝试使用 sqlite3_open 打开数据库时,它不起作用。我收到一条错误消息,说无法打开数据库。

我相信 SQLite 使用的某些 API 不能用于 Metro 风格的应用程序。

有人可以帮我吗?至少告诉我如何确定应该移植哪些 api?

4

5 回答 5

3

此代码应该可以工作:

auto localAppDataParh = Windows::Storage::ApplicationData::Current->LocalFolder->Path;
std::wstring path( localAppDataParh->Data() );
path += L"\\sample.db";
sqlite3* db;
int rc = sqlite3_open16( path.c_str(), &db);

我相信 SQLite 使用的某些 API 不能用于 Metro 风格的应用程序。

可能有效(至少在预览版上),但不允许。Windows 应用程序证书工具包 说:

   错误:此应用程序未通过支持的 API 检查。
   此应用程序类型不支持 kernel32.dll 中的 API CreateFileA。
   此应用程序类型不支持 kernel32.dll 中的 API CreateFileW。
   此应用程序类型不支持 kernel32.dll 中的 API DeleteFileA。
    :
    :
于 2011-10-14T05:38:11.313 回答
1

尝试在本地文件夹中打开数据库。这是一个有效的包装器:http ://sqlwinrt.codeplex.com/

于 2011-10-13T20:19:43.730 回答
1

试试这个(仅适用于 UTF-8 数据库文件名):

int ret = Sqlite3.sqlite3_open_v2("qq.db", out db, 1, "");

有关更多详细信息,请参见sqlite.org

于 2011-12-06T06:46:39.790 回答
1

刚刚发布了一个新的 WinRT SQLite3 变体,它与 Windows 应用商店指南兼容。见https://github.com/doo/SQLite3-WinRT

于 2012-05-07T09:51:21.717 回答
0

我没有在 WinRT 中尝试过 sqllite,但我认为它应该可以工作。最有可能的原因是您对尝试打开的文件没有正确的权限。检查以确保您可以使用 fopen() 之类的简单 API 打开文件。如果失败,那就是权限问题。您需要将数据库放在您的应用程序拥有自然权限的目录中。例如,它不能在用户的文档文件夹中。

于 2011-10-12T21:19:20.553 回答