Как подключиться к базе данных sqlite в C ++ с помощью Visual Studio 2017 в Windows? - PullRequest
0 голосов
/ 17 мая 2018

Я довольно новичок в разработке Windows и C ++.Пытаясь подключиться к базе данных sqlite, я написал следующий фрагмент:

#include "stdafx.h"
#include "sqlite3.h"

int main()
{
    sqlite3* db;

    if (sqlite3_open(<path to db>, &db) != SQLITE_OK) {
        printf("ERROR: can't open database: %s\n", sqlite3_errmsg(db));
    }
    else { printf("Connection Successful"); }

    sqlite3_close(db);

    return 0;
}

Я скачал пакет VSIX Universal Windows Platform из http://www.sqlite.org/download.html,, который включал файл sqlite3.lib иsqlite3.dll.В Microsoft Visual Studio 2017 я включил файл и каталоги sqlite3.lib и скопировал файл sqlite3.dll в каталог проекта.

Следует отметить, что sqlite3.lib включен в версию x86.Попытка включить версию x64 приводит к ошибке сборки с помощью оператора #include "sqlite3.h".Я хотел бы знать, почему это так, но сейчас я могу жить с 32-разрядной версией.

Запуск кода как есть приводит к следующей ошибке во время выполнения: «Выполнение кода не может быть продолжено, поскольку VCRUNTIME140_APP.dllне был найден ... "

Эта ссылка предполагает, что dll должен был быть включен в установку Visual Studio.Упомянутый файл dll существует в C: \ Program Files (x86) в нескольких местах, включая папку Microsoft SDKs, в которой находится файл .lib.Почему его нельзя найти?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Загрузите и скопируйте следующую папку в папку решения Visual C ++.https://github.com/mcychan/DNAssist/tree/master/sqlite3
Папка sqlite3 содержит как x86, так и x64 версию sqlite dll и lib.Вы можете обновить до последней версии sqlite.dll.Загрузите и скопируйте следующие файлы в папку проекта Visual C ++, добавьте ссылку на них.https://github.com/mcychan/DNAssist/blob/master/DNAssist/CppSQLite3.cpp
https://github.com/mcychan/DNAssist/blob/master/DNAssist/CppSQLite3.h

Ниже приведен пример кода для запроса базы данных.

#include "CppSQLite3.h"
#include <iostream>
#include <string>

using namespace std;

CppSQLite3DB db;

bool GetDatabase(const string& dbPath)
{
    try {
        db.open(dbPath.c_str());
        return true;
    }
    catch (CppSQLite3Exception& e)
    {
        cout << _T("Cannot open database: ") << dbPath << _T("\n");
        return false;
    }
}

void IssueQuery(const string& querystring, const string& field1)
{
    try {
        CppSQLite3Query q = db.execQuery(querystring.c_str());
        while (!q.eof()) {
            CString temp2(q.fieldValue(field1.c_str()));
            TRACE(temp2 + _T("\n"));
            q.nextRow();
        }
    }
    catch (CppSQLite3Exception& e)
    {
        cout << _T("Cannot execute query: ") << querystring << _T("\n");
    }
}

void main()
{
    if(GetDatabase("C:\\test.sqlite"))
        IssueQuery("SELECT * FROM DUAL", "X");
}
0 голосов
/ 17 мая 2018

SQLite будет компилироваться под msvc без хлопот.Таким образом, вы можете напрямую включать sqlite3.h и sqlite3.cpp в ваш проект в msvc и избегать использования в качестве библиотеки зависимостей.

...