.NET Framework 內建深度支援 SQL Server,但對 MySQL 等第三方資料庫則透過 ADO.NET 介面規範,由廠商或社群提供對應的 Data Provider。早期常用 ODBC.NET 橋接,但需設定 DSN 且效能非最佳。開源專案 MySQLDriverCS 直接封裝 MySQL 原生 C API (libmysql.dll),提供純 managed 的高效能解決方案,成為 .NET 1.x/2.0 時代連接 MySQL 的主流選擇之一。
MySQLDriverCS 的核心在 CPrototypes.cs,利用 System.Runtime.InteropServices.DllImport 將 libmysql.dll 的 C 函式對應為 C# 靜態方法,例如:
mysql_init、mysql_real_connect:連線初始化與建立mysql_query、mysql_store_result:送出查詢與取得結果集mysql_fetch_row、mysql_fetch_field_direct:逐列讀取與欄位中繼資料mysql_errno、mysql_error:錯誤處理並定義對應 C 結構體的 managed 類別(如 MYSQL_FIELD_VERSION_3/5),處理不同 MySQL 版本的欄位結構差異。透過 GetClientInfo() 檢測客戶端庫版本,動態決定使用哪種欄位結構,實現版本相容。
// 連線範例
[DllImport("libmysql.dll", EntryPoint = "mysql_real_connect")]
unsafe public static extern void* mysql_real_connect(
void* mysql, string host, string user, string passwd,
string db, uint port, string unix_socket, int client_flag);
// 查詢執行
[DllImport("libmysql.dll", EntryPoint = "mysql_query")]
unsafe public static extern int mysql_query(void* mysql, string query);
MySQLDriverCS.dll。libmysql.dll 放置於輸出目錄或系統 PATH 中。MySQLDriverCS.MySQLConnection、MySQLCommand、MySQLDataReader 等符合 ADO.NET 模式的類別進行操作。目前官方推薦使用 MySQL Connector/NET (NuGet: MySql.Data),它是純 managed 實作,無需部署 libmysql.dll,支援 .NET Core / .NET 5+、非同步 API、連線池、EF Core 等現代特性。MySQLDriverCS 現僅供舊版專案維護參考。
MySQLDriverCS 展示了如何透過 P/Invoke 將成熟的 C 庫帶入 .NET 生態,其原始碼也是學習 ADO.NET Provider 實作與 Interop 技術的優良教材。對於新專案,請優先採用官方 Connector/NET 以獲得最佳支援與效能。