拒絕 ODBC 額外依賴,直接使用官方 libmysql 庫,輕量、可控、性能最優。
MySQL安裝目錄\include(如 C:\MySQL\MySQL Server 5.1\include)libmysql.lib、libmysql.dll 複製到專案目錄#include "winsock.h"
#include "mysql.h"
#pragma comment(lib, "libmySQL.lib")
class MySQLConn {
MYSQL m_sqlCon;
public:
bool Connect(const char* host, const char* user, const char* pwd, const char* db, unsigned int port) {
mysql_init(&m_sqlCon);
if (!mysql_real_connect(&m_sqlCon, host, user, pwd, db, port, NULL, 0)) {
AfxMessageBox(_T("數據庫連接失敗!"));
return false;
}
return true;
}
void Close() { mysql_close(&m_sqlCon); }
bool Execute(const char* sql) {
return mysql_real_query(&m_sqlCon, sql, (unsigned int)strlen(sql)) == 0;
}
const char* GetError() { return mysql_error(&m_sqlCon); }
};
// 建表
char* sql = "CREATE TABLE IF NOT EXISTS DS_Building (ID VARCHAR(10) PRIMARY KEY, Name VARCHAR(255), Descs VARCHAR(255))";
conn.Execute(sql);
// 查詢結果集處理
if (conn.Execute("SELECT * FROM users")) {
MYSQL_RES* res = mysql_store_result(&conn.m_sqlCon);
if (res) {
int fields = mysql_num_fields(res);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
// 處理 row[0]...row[fields-1]
}
mysql_free_result(res);
}
}
| 分類 | 核心函數 | 說明 |
|---|---|---|
| 連接管理 | mysql_init() | 初始化 MYSQL 結構 |
| mysql_real_connect() | 建立真實連接(推薦) | |
| mysql_close() | 關閉連接 | |
| 查詢執行 | mysql_query() | 執行 SQL 字符串 |
| mysql_real_query() | 執行帶長度的 SQL(含二進制) | |
| mysql_store_result() | 獲取完整結果集 | |
| mysql_use_result() | 流式獲取結果集 | |
| 結果處理 | mysql_fetch_row() | 取下一行 |
| mysql_num_rows() | 結果集行數 | |
| mysql_free_result() | 釋放結果集內存 | |
| 錯誤信息 | mysql_errno() | 錯誤碼 |
| mysql_error() | 錯誤信息 | |
| mysql_affected_rows() | 影響行數 |
現象:
無法解析的外部符號鏈接錯誤,庫路徑、依賴項全對。
根因:VS 專案平台默認Win32(32位),嘗試鏈接 64 位libmysql.lib。
解決:配置管理器 → 活動解決方案平台 → 新建 x64 → 刪除 Win32。或下載 32 位庫文件替換。
掌握原生 API 開發,擺脫驅動依賴,構建高性能 C++ 數據庫應用。