我正在尝试创建连接到MySQL数据库的C ++ / WinRT UWP应用程序,但实际上任何查询任何内容的方式都将是很棒的。我只需要以一种方便的方式存储和更新我的数据,并通过LAN使用它即可。
有关WinRT的信息,我被重定向到UWP文档,在那里我找到了使用System.Data.SQLite / SqlClient或MySQL.Data的方法,但所有这些都返回了:
您正在尝试将此软件包安装到以“ native,Version = v0.0”为目标的项目中,但是该软件包不包含任何与该框架兼容的程序集引用或内容文件。
这意味着不支持WinRT(“本机”)。
我找到了“用于Windows运行时的SQLite(Windows 8.1)”,但是当我尝试执行install-Package SQLite.WinRT
时,却遇到了相同的错误。在WinRT中存储关系数据的首选方式是什么?我在做什么错了?
答案 0 :(得分:0)
在过去的几周中,我一直在让SQLite在C ++ / WinRT应用程序中工作。 SQLite已内置在Windows sdk中,但是我没有足够快地发现它,因此放弃了使用vcpkg中可用的sqlite.org推出的正式版本的方法。
我能够很轻松地使库正常工作,但是却无法解决C接口的问题。 vcpkg中也提供了一些不错的C ++包装器,因此我尝试了其中的2个并决定使用sqlite_modern_cpp。它似乎并未得到积极的研究,但它只是一个界面,可以与sqlite 3.28版本配合使用。
要开始使用sqlite或sqlite_modern_cpp,我基本上使用相同的方法。
1。使用vcpkg安装其中之一
.\vcpkg.exe install sqlite-modern-cpp:x64-uwp
或
.\vcpkg.exe install sqlite3:x64-uwp
2。在vcpkg中启用用户范围的集成
.\vcpkg.exe integrate install
3。使用C ++ / WinRT空白应用程序模板创建新项目
4。更改为x64版本
5。更改为x64后,您应该可以将以下内容添加到pch.h
#include "sqlite_modern_cpp.h"
或
#include "sqlite3.h"
6。现在,您可以创建一个sqlite数据库并添加一个表
此示例使用sqlite-modern-cpp并将其放置在空白应用程序模板的点击处理程序中,只是要在某处放置它。
void MainPage::ClickHandler(IInspectable const&, RoutedEventArgs const&)
{
myButton().Content(box_value(L"Clicked"));
// path for the temporary database file
hstring path{ ApplicationData::Current().LocalFolder().Path() + L"\\temp.db" };
// store the file name for use later
std::string fname = to_string(path.c_str());
// open a connection to the database or create the file if it doesn't exist
sqlite::database db(fname); // default is READWRITE | CREATE
// enable foreign keys
db << "PRAGMA foreign_keys = ON;";
// create a new table, if needed
db << "CREATE TABLE IF NOT EXISTS division ("
" id INTEGER PRIMARY KEY AUTOINCREMENT,"
" name TEXT NOT NULL,"
" distance INTEGER NOT NULL,"
" size INTEGER NOT NULL,"
" lanes INTEGER NOT NULL,"
" rank INTEGER NOT NULL,"
" progression TEXT NOT NULL,"
" UNIQUE (name, distance, size)"
");";
}
7。运行应用程序并单击按钮将生成数据库。
使用上述方法,该文件将在应用程序本地文件夹中创建。 C:\ Users \\ AppData \ Local \ Packages \\ LocalState \ temp.db