mysql - 如何从 C++/WinRT UWP 应用程序连接到 SQL Server?
问题描述
我正在尝试创建连接到 MySQL 数据库的 C++/WinRT UWP 应用程序,但实际上任何查询任何内容的方式都会很棒;我只需要以一种方便的方式存储和更新我的数据并通过 LAN 使用它。
了解 WinRT 我被重定向到 UWP 文档,在那里我找到了使用 System.Data.SQLite/SqlClient 或 MySQL.Data 的方法,但所有这些都返回:
您正在尝试将此包安装到以“native,Version=v0.0”为目标的项目中,但该包不包含任何与该框架兼容的程序集引用或内容文件。
这意味着不支持 WinRT(“本机”)。
我找到了“SQLite for Windows Runtime (Windows 8.1)”,但是当我尝试这样做时,install-Package SQLite.WinRT
我遇到了同样的错误。在 WinRT 中存储关系数据的首选方式是什么,或者我做错了什么?
解决方案
在过去的几周里,我一直在让 SQLite 在 C++/WinRT 应用程序中工作。SQLite 是内置在 windows sdk 中的,但我没有很快发现这一点,而是走上了使用 vcpkg 中提供的官方版本并由sqlite.org推出的路径。
我能够相当轻松地让库工作,但我无法掌握 C 接口的窍门。在 vcpkg 中也有一些很好的 C++ 包装器,所以我尝试了其中的 2 个并决定使用sqlite_modern_cpp。它似乎并没有被积极处理,但它只是一个界面,并且与 3.28 版的 sqlite 配合得很好。
要开始使用 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 Blank App 模板新建项目
4.更改为x64构建
5. 改成 x64 后,应该可以在 pch.h 中添加以下内容
#include "sqlite_modern_cpp.h"
或者
#include "sqlite3.h"
6.现在你可以创建一个sqlite db并添加一个表
此示例使用 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
推荐阅读
- c++ - 定义聚合
- tensorflow - 在 keras 优化器中获取 epoch
- javascript - 如何判断页面上是否有任何待处理(未完成)的 Promise
- teamcity - TeamCity 计划触发器在每个月的最后一个星期一运行
- javascript - 如何使用异步调用以获得最佳性能
- python - 如何使用 Python 创建一个循环来计算每个时间序列子样本序列的平均值?
- amazon-web-services - 如何将存储桶策略 json 转换为 serverless.yaml
- c# - 输入错误的用户名和密码时如何给出错误
- html - 什么定义了您需要按 VO + shift + down 才能进入 macOS 画外音的组?
- python - 如何更改 python-pptx 中的文本颜色?