Я довольно новичок в разработке 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 для универсальной платформы Windows из 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. Почему это не может быть найдено?
SQLite будет компилироваться под msvc без хлопот. Таким образом, вы можете напрямую включать sqlite3.h и sqlite3.cpp в ваш проект в msvc и избегать использования в качестве библиотеки зависимостей.
Загрузите и скопируйте следующую папку в папку решения 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");
}