專案需求從 SQL Server 轉向 MySQL,採用 MySQL 官方 C API 直接連接,避免額外安裝 ODBC 驅動。開發環境:Visual Studio 2010/2015,MySQL 5.1/5.6/5.7。
MySQL安裝目錄\include (如 C:\Program Files\MySQL\MySQL Server 5.1\include)libmysql.dll 與 libmysql.lib 複製至專案目錄#include <winsock.h> #include <mysql.h> #pragma comment(lib, "libmySQL.lib")
// 標頭檔宣告
MYSQL m_sqlCon;
// 連接函式
bool ConnectMySQL() {
try {
mysql_init(&m_sqlCon);
// 參數:連接結構、主機、用戶、密碼、資料庫、埠、Unix socket、客戶端旗標
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "root", "test", 3306, NULL, 0)) {
AfxMessageBox(_T("資料庫連接失敗!"));
return FALSE;
}
return TRUE;
} catch (...) {
return FALSE;
}
}
mysql_close(&m_sqlCon);
char* pQuery = "CREATE TABLE IF NOT EXISTS DS_Building( ID VARCHAR(10), Name VARCHAR(255), Descs VARCHAR(255), PRIMARY KEY (ID) )";
if (mysql_real_query(&m_sqlCon, pQuery, (UINT)strlen(pQuery)) != 0) {
const char* pErr = mysql_error(&m_sqlCon);
return FALSE;
}
| 函式 | 用途 |
|---|---|
| mysql_affected_rows() | 返回最近 UPDATE/DELETE/INSERT 影響的行數 |
| mysql_close() | 關閉伺服器連接 |
| mysql_real_connect() | 連接 MySQL 伺服器 (推薦) |
| mysql_real_query() | 執行帶長度的 SQL 查詢 |
| mysql_store_result() | 檢索完整結果集至客戶端 |
| mysql_fetch_row() | 從結果集取得下一行 |
| mysql_free_result() | 釋放結果集記憶體 |
| mysql_errno() / mysql_error() | 取得最近錯誤碼/訊息 |
| mysql_insert_id() | 取得 AUTO_INCREMENT 生成的 ID |
(完整 50 個 API 列表請參考官方文檔)
現象:連結器報錯 無法解析的外部符號,檢查庫路徑、依賴項均正確。
原因:VS 預設編譯目標為 x86 (32 位元),但 MySQL 庫為 64 位元版本。
解決:專案屬性 → 配置管理器 → 作用平台改為 x64;或下載 32 位元的 libmysql.lib/dll 替換。
掌握 C API 直連方式,能讓 C++ 應用輕量級整合 MySQL,避免 ODBC 層級的額外依賴與配置複雜度。