1、安装ODBC(前期准备)------安装方法(安装ODBC方法-CSDN博客

2、C++代码(运行环境vs2019)

#include <iostream>
#include <string>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <sql.h>

int main() {
	// 定义数据库连接句柄和语句句柄
	SQLHANDLE hEnv;   // 环境句柄
	SQLHANDLE hDbc;   // 数据库连接句柄
	SQLHANDLE hStmt;  // 语句句柄

	// 初始化环境句柄
	SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
	SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

	// 初始化数据库连接句柄
	SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);

	// 连接数据库
	SQLCHAR* connStr = (SQLCHAR*)"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Users\\*****\\Desktop\\country.accdb"; //数据库路径
	SQLRETURN ret = SQLDriverConnect(hDbc, NULL, connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

	if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
		std::cout << "Connected to the database." << std::endl;

		// 初始化语句句柄
		SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);

		//执行查询语句
		SQLCHAR* selectQuery = (SQLCHAR*)"SELECT * FROM country";
		ret = SQLExecDirect(hStmt, selectQuery, SQL_NTS);

		//处理查询结果
		SQLCHAR arrID[256];
		while (SQLFetch(hStmt) == SQL_SUCCESS) {
			SQLGetData(hStmt, 1, SQL_C_CHAR, arrID, sizeof(arrID), NULL);
			std::cout << "编号: " << arrID << std::endl;
		}

		/*
		在某些数据库管理系统中,
		游标的默认位置可能会影响后续的更新操作
		*/
		// 关闭结果集的游标
		SQLCloseCursor(hStmt);

		// 插入数据
		SQLCHAR* insertQuery = (SQLCHAR*)"INSERT INTO country (编号, 国家) VALUES (14, '泰国')";
		ret = SQLExecDirect(hStmt, insertQuery, SQL_NTS);
		std::cout << "Data inserted." << std::endl;

		// 更新数据
		SQLCHAR* updateQuery = (SQLCHAR*)"UPDATE country SET 国家 = '美国' WHERE 编号 = 14";
		ret = SQLExecDirect(hStmt, updateQuery, SQL_NTS);
		std::cout << "Data updated." << std::endl;

		// 删除数据
		SQLCHAR* deleteQuery = (SQLCHAR*)"DELETE FROM country WHERE 编号 = 14";
		ret = SQLExecDirect(hStmt, deleteQuery, SQL_NTS);
		std::cout << "Data deleted." << std::endl;

		// 释放资源
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		SQLDisconnect(hDbc);
	}
	else {
		std::cout << "Failed to connect to the database." << std::endl;
	}

	// 释放句柄
	SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
	SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

	return 0;
}

代码中用到的数据库: 

Logo

一站式 AI 云服务平台

更多推荐