【发布时间】:2021-06-09 22:28:22
【问题描述】:
参考此链接C++\SQL ODBC: Get row from table 我不理解这些文档,并尝试了许多变体来使某些东西起作用,但它只会输出完整的胡言乱语。基本上,我怎样才能从我的 Microsoft Access 数据库中获取数据到我的 C++ 程序中。我最终希望将整个表存储为数组或向量,也就是说,假设我的表中有 5 个字段,我想将所有内容存储(在 5 个不同的数组或向量中)到相应的字段。但是现在,我怎么能只拥有一个名为“示例表”的表,其中有一个名为“名称”的字段,并且类型是 Access 所称的字符串或“短文本”。然后如何将其加载到字符串数组或 char* 中以用于我的 GUI 或程序的其他部分?这是我当前的代码:
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <sqlext.h>
#include <iostream>
WCHAR szDSN[] = L"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\Users\\Name\\Desktop\\databaseExample\\databaseExample\\Data.accdb";
int _tmain(int argc, _TCHAR* argv[])
{
HENV hEnv;
HDBC hDbc;
/* ODBC API return status */
RETCODE rc;
int iConnStrLength2Ptr;
WCHAR szConnStrOut[256];
const WCHAR* query = L"select Names from Example_Table";
HSTMT hStmt;
/* Allocate an environment handle */
rc = SQLAllocEnv(&hEnv);
/* Allocate a connection handle */
rc = SQLAllocConnect(hEnv, &hDbc);
/* Connect to the database */
rc = SQLDriverConnect(hDbc, NULL, (WCHAR*)szDSN,
SQL_NTS, (WCHAR*)szConnStrOut,
255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(rc))
{
wprintf(L"Successfully connected to database. Data source name: \n %s\n",
szConnStrOut);
/* Prepare SQL query */
wprintf(L"SQL query:\n %s\n", query);
rc = SQLAllocStmt(hDbc, &hStmt);
rc = SQLPrepare(hStmt, (SQLWCHAR*)query, SQL_NTS);
/* Excecute the query */
rc = SQLExecute(hStmt);
if (SQL_SUCCEEDED(rc))
{
wprintf(L"SQL Success\n");
}
else {
wprintf(L"SQL Failed\n");
}
}
else
{
wprintf(L"Couldn't connect to %s.\n", szDSN);
}
/* Disconnect and free up allocated handles */
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
getchar();
printf("hi\n");
return 0;
}
【问题讨论】:
标签: c++ sql database ms-access odbc