Как подключиться к серверу SQL из приложения C ++ / WinRT UWP? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь создать приложение C ++ / WinRT UWP, которое подключается к базе данных MySQL, но на самом деле любой способ запроса чего-либо был бы полезен;Мне просто нужно хранить и обновлять свои данные удобным способом и использовать их по локальной сети.

Изучение WinRT Меня перенаправили в документы UWP, где я нашел способы использовать System.Data.SQLite / SqlClient илиMySQL.Data, но все они возвращают это:

Вы пытаетесь установить этот пакет в проект, который нацелен на 'native, Version = v0.0', но пакет не содержит никаких ссылок на сборки илифайлы содержимого, совместимые с этой платформой.

Это означает, что WinRT («нативный») не поддерживается.

Я обнаружил «SQLite для среды выполнения Windows (Windows 8.1)», но при попытке сделать install-Package SQLite.WinRT я получаю ту же ошибку.Каков предпочтительный способ хранения реляционных данных в WinRT или что я делаю неправильно?

1 Ответ

0 голосов
/ 28 июля 2019

За последние пару недель я работал с 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 build

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

...