桌面應用(VC++、Delphi、VB、BCB 等)接入 MySQL 主有兩條路徑:調用官方 C API 庫,或通過 MyODBC 驅動走 ODBC 標準介面。本文對比兩種方案的優劣、適用場景,並給出 MyODBC 手動部署的完整註冊表腳本。
| 維度 | C API (libmysql.dll) | MyODBC (ODBC 驅動) |
|---|---|---|
| 開發難度 | 高:需熟悉 mysql_init/real_connect/query/store_result/fetch_row 等 20+ API | 低:標準 ODBC API(SQLConnect/SQLExecDirect/SQLFetch),通用性強 |
| 語言綁定 | 需各語言自行封裝或找現成 Wrapper | VB/Delphi/VC/VB.NET/C# 皆有原生 ODBC 支持 |
| 部署體積 | 僅 libmysql.dll (~1MB) | 驅動 ~2MB + ODBC 管理器(系統自帶) |
| ASP/COM 支持 | ❌ 無 COM 介面 | ✅ 支持 ADO/ASP 經典應用 |
| 效能 | 略高(直連協議) | 極微損耗(ODBC 層轉換),可忽略 |
| 維護性 | 代碼耦合 MySQL,遷移成本高 | 標準介面,遷移只需換 DSN/連接字符串 |
建議: 新項目優先 **MyODBC/ODBC**;極致效能或嵌入式場景才考慮 C API。
myodbc.dll(官網「Without installer」壓縮包)C:\Windows\SystemC:\Windows\System32myodbc.reg 雙擊導入):Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MyODBC Driver]
"UsageCount"=dword:00000002
"Driver"="C:\\Windows\\System32\\myodbc.dll"
"Setup"="C:\\Windows\\System32\\myodbc.dll"
"SQLLevel"="1"
"FileUsage"="0"
"DriverODBCVer"="02.50"
"ConnectFunctions"="YYY"
"APILevel"="1"
"CpTimeout"="120"
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"MyODBC Driver"="installed"
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MyODBC Driver]
"UsageCount"=dword:00000002
"Driver"="C:\\Windows\\System\\myodbc.dll"
"Setup"="C:\\Windows\\System\\myodbc.dll"
... (其餘鍵值相同) ...
odbcad32.exe)→「系統 DSN」→「添加」→ 選擇「MyODBC Driver」→ 填寫:127.0.0.1 或主機名3306root / 應用賬號ADOConnection1.ConnectionString :=
'Provider=MSDASQL.1;Persist Security Info=False;Data Source=MyMySQLDSN;Initial Catalog=testdb;';
ADOConnection1.Open;
CDatabase db;
db.OpenEx(_T("DSN=MyMySQLDSN;UID=root;PWD=pass;"), CDatabase::noOdbcDialog);
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM users"));
C:\Windows\SysWOW64\odbcad32.exe 配置 32 位 DSN,並放置 32 位 myodbc.dll。CHARSET=utf8mb4 或執行 SET NAMES utf8mb4。host='%' 或具體 IP 授權。掌握 ODBC 部署細節,能讓桌面應用快速、穩定、可遷移地接入 MySQL,避免重造輪子。