方案對照表
| 方案 | 核心組件 | 命名空間 | 適用場景 |
| 1. 官方驅動 | MySQL Connector/Net | MySql.Data.MySqlClient | 原生 ADO.NET、效能最佳、維護最活躍 |
| 2. ODBC 橋接 | ODBC.NET + MyODBC 3.51 | System.Data.Odbc | 異質資料庫整合、舊系統遷移 |
| 3. 第三方商用 | CoreLab.MySql | CoreLab.MySql | 需進階功能(如連線池優化)時考慮 |
方案一:MySQL Connector/Net(推薦)
安裝與參考
連線字串範例
Database=test;Data Source=localhost;User Id=root;Password=qing
命令列編譯
csc /r:MySql.Data.dll test.cs
方案二:ODBC 連接
前置需求
- 安裝 ODBC.NET Provider (Microsoft Data Access Components)
- 安裝 MySQL Connector/ODBC (MyODBC) 3.51
- 於「控制台 → 系統管理工具 → 資料來源 (ODBC)」設定系統 DSN 或使用無 DSN 連線字串
無 DSN 連線字串
DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;UID=root;PASSWORD=qing;OPTION=3
命名空間
using System.Data.Odbc;
方案三:CoreLab MySqlDirect
特點
- 商用元件,功能豐富(支援壓縮、SSL、進階連線池)
- 需購買授權,適合企業級專案
連線字串
User Id=root;Host=localhost;Database=qing;password=qing
編譯指令
csc /r:CoreLab.MySql.dll test.cs
完整程式碼範例:三種方式同步展示
using System;
using System.Data.Odbc;
using MySql.Data.MySqlClient;
using CoreLab.MySql;
class ConnectMySql
{
// 方案一:Connector/Net
public void Connect_Net()
{
string connStr = "Database=test;Data Source=localhost;User Id=root;Password=qing";
using (var cn = new MySqlConnection(connStr))
using (var cmd = new MySqlCommand("SELECT * FROM hello", cn))
{
cn.Open();
using (var dr = cmd.ExecuteReader())
while (dr.Read()) Console.WriteLine(dr.GetString(0));
}
}
// 方案二:ODBC
public void Connect_Odbc()
{
string connStr = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=localhost;DATABASE=test;UID=root;PASSWORD=qing;OPTION=3";
using (var cn = new OdbcConnection(connStr))
using (var cmd = new OdbcCommand("SELECT * FROM hello", cn))
{
cn.Open();
using (var dr = cmd.ExecuteReader())
while (dr.Read()) Console.WriteLine(dr.GetString(0));
}
}
// 方案三:CoreLab
public void Connect_CoreLab()
{
string connStr = "User Id=root;Host=localhost;Database=qing;password=qing";
using (var cn = new CoreLab.MySql.MySqlConnection(connStr))
using (var cmd = new CoreLab.MySql.MySqlCommand("SELECT * FROM shop", cn))
{
cn.Open();
using (var dr = cmd.ExecuteReader())
while (dr.Read()) Console.WriteLine(dr.GetString(0));
}
}
public static void Main()
{
var demo = new ConnectMySql();
demo.Connect_Net();
demo.Connect_Odbc();
demo.Connect_CoreLab();
}
}
最佳實踐建議
- 優先使用 Connector/Net:原生 ADO.NET 實作,效能最好、相容性最高、社群支援最完善。
- 連線字串外部化:存於
app.config 或 appsettings.json,避免硬編碼。
- 善用 using 區塊:確保連線、命令、讀取器正確釋放,防止連線洩漏。
- 參數化查詢:防止 SQL Injection,範例中為簡化省略,實務必加參數。
- 連線池:Connector/Net 內建連線池,連線字串相同即可複用,無需額外設定。
常見問題排查
| 錯誤現象 | 可能原因 | 解決方向 |
| Unable to connect to any of the specified MySQL hosts | 防火牆阻擋 3306、MySQL bind-address 設定、帳號權限 | 檢查防火牆、my.cnf、GRANT 權限 |
| Authentication method unknown | Connector/Net 版本過舊不支援新版 MySQL 認證插件 | 升級 Connector/Net 至 8.0+ |
| ODBC 驅動程式找不到 | 未安裝 MyODBC 或位元數不符 (x86/x64) | 安裝對應版本 MyODBC,確認 ODBC 管理員位元數 |
結語
掌握三種連接方式,可因應不同專案限制(授權、舊系統、效能需求)。現代 .NET 專案強烈建議標準化於 MySQL Connector/Net,搭配 MySql.Data 套件,獲得最佳開發體驗與長期維護保障。