如何从C ++ / WinRT UWP app连接到SQL Server?

时间:2019-07-11 16:19:25

标签: mysql sqlite uwp c++-winrt

我正在尝试创建连接到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中存储关系数据的首选方式是什么?我在做什么错了?

1 个答案:

答案 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