本文詳述 MySQL 5.0 在 Windows 下的安裝、VC6.0 專案設定、資料庫/資料表建立、CRUD 操作完整程式碼,適合初次接觸 MySQL C API 的開發者快速上手。
mysql-5.0.41-win32.msi (或更新版本)。include/ 標頭檔與 lib/ 函式庫。Tools → Options → Directories → Include files → 新增:
D:\Program Files\MySQL\MySQL Server 5.0\include
Directories → Library files → 新增:
D:\Program Files\MySQL\MySQL Server 5.0\lib\debug
(lib/debug 含除錯符號,lib/opt 為發布版,二選一即可)
Project → Settings → Link → Object/library modules → 新增:
libmysql.lib
#include "mysql.h"
#include "winsock.h"
#pragma comment(lib, "libmySQL.lib")
將 libmySQL.lib、libmySQL.dll 複製至專案目錄 (或系統目錄),確保執行期可載入。
mysql> SHOW DATABASES;
mysql> CREATE DATABASE mydb;
mysql> USE mydb;
mysql> CREATE TABLE mytable (
username VARCHAR(100),
visitelist VARCHAR(200),
remark VARCHAR(200)
);
mysql> DESCRIBE mytable;
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "localhost", "root", "", "mydb", 3306, NULL, 0)) {
AfxMessageBox(_T("資料庫連線失敗"));
return FALSE;
}
建議將 mysql 宣告為類別成員,在 OnDestroy 中 mysql_close(&mysql)。
CString strSQL;
strSQL.Format(_T("INSERT INTO mytable (username, visitelist, remark) VALUES ('%s','%s','%s')"),
strUsername, strList, strRemark);
// 注意:單引號在 Format 字串中需轉義 \' 或雙引號包裹
if (mysql_real_query(&mysql, (const char*)strSQL, strSQL.GetLength()) != 0) {
AfxMessageBox(_T("新增失敗"));
}
strSQL.Format(_T("UPDATE mytable SET username='%s', visitelist='%s', remark='%s' WHERE username='%s'"),
strUsername, strList, strRemark, str_PreName); // str_PreName 為原 username
if (mysql_real_query(&mysql, (const char*)strSQL, strSQL.GetLength()) != 0) {
AfxMessageBox(_T("修改失敗"));
}
strSQL.Format(_T("DELETE FROM mytable WHERE username='%s'"), str_PreName);
if (mysql_real_query(&mysql, (const char*)strSQL, strSQL.GetLength()) != 0) {
AfxMessageBox(_T("刪除失敗"));
}
m_list.DeleteAllItems();
if (mysql_real_query(&mysql, "SELECT * FROM mytable", strlen("SELECT * FROM mytable")) != 0) {
AfxMessageBox(_T("查詢失敗")); return;
}
MYSQL_RES* result = mysql_use_result(&mysql);
if (!result) { AfxMessageBox(_T("取得結果集失敗")); return; }
MYSQL_ROW row;
int i = 0;
while ((row = mysql_fetch_row(result)) != NULL) {
m_list.InsertItem(i, row[0] ? row[0] : "");
m_list.SetItemText(i, 1, row[1] ? row[1] : "");
m_list.SetItemText(i, 2, row[2] ? row[2] : "");
++i;
}
mysql_free_result(result);
mysql_stmt_prepare 參數化查詢。SET NAMES 'utf8' (或 gbk/big5),並確保 VC 專案字元集一致。mysql_error(&mysql) 取得詳細錯誤訊息,建議封裝統一錯誤報告函式。WideCharToMultiByte/MultiByteToWideChar。MySQLDemo.exe。CListCtrl 即時反映。SELECT * FROM mytable; 交叉驗證。MySQL C API (mysql.h) 提供輕量級連接介面,配合 VC6 經典 MFC 專案,可快速構建資料庫應用。本文涵蓋安裝、專案設定、DDL/DML 完整範例,為後續進階開發 (連線池、預處理語句、事務控制、ORM 封裝) 奠定基礎。完整 Demo 原始碼請下載附件,含 mydb 資料庫匯出腳本,置於 MySQL data/ 目錄即可直接測試。