.NET 應用連接 MySQL 主要有三種驅動方式,各有優缺點。本文提供完整程式碼範例與選型建議。
套件來源:SourceForge `MySQLDriverCS.dll`
using MySQLDriverCS;
// 連接字串建構
MySQLConnectionString connStr = new MySQLConnectionString(
"10.99.19.121", // Host
"haha", // Database
"root", // User
"root", // Password
3306 // Port
);
using (MySQLConnection conn = new MySQLConnection(connStr.AsString))
{
try
{
conn.Open();
MessageBox.Show("資料庫已連線!");
string sql = "SELECT * FROM tb_user";
MySQLDataAdapter adapter = new MySQLDataAdapter(sql, conn);
DataSet ds = new DataSet();
adapter.Fill(ds, "table1");
dataGridView1.DataSource = ds.Tables["table1"];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
套件來源:NuGet `MySql.Data` 或官網下載 `mysql.data.dll`
註冊 DLL(若手動複製):
# 64位系統
copy mysql.data.dll C:\Windows\SysWOW64\
regsvr32 mysql.data.dll
using MySql.Data.MySqlClient;
string connStr = "server=10.99.19.121;user id=root;password=root;database=haha;charset=utf8;";
using (MySqlConnection conn = new MySqlConnection(connStr))
{
try
{
conn.Open();
MessageBox.Show("資料庫已連線!");
string sql = "SELECT * FROM tb_user";
MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
adapter.Fill(ds, "table1");
dataGridView1.DataSource = ds.Tables["table1"];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
前置作業:安裝 MySQL ODBC Driver (32/64 位對應應用)、設定系統 DSN
using System.Data.Odbc;
string dsn = "DSN=MySQL_DSN;UID=root;PWD=root;";
using (OdbcConnection conn = new OdbcConnection(dsn))
{
try
{
conn.Open();
// 後續操作同 ADO.NET 模式
}
catch (Exception ex) { /* ... */ }
}
| 維度 | MySQLDriverCS | MySql.Data (官方) | ODBC |
|---|---|---|---|
| 維護狀態 | 停止更新(舊專案) | 持續更新(官方) | 標準介面 |
| 功能完整度 | 基礎 | 完整(支援所有新特性) | 基礎 |
| 效能 | 尚可 | 最佳(原生協定) | 有額外層開銷 |
| 部署複雜度 | 單一 DLL | NuGet 管理/單一 DLL | 需安裝驅動+設定 DSN |
| 跨資料庫遷移 | 困難 | 困難 | 容易(標準介面) |
| 推薦場景 | 舊專案維護 | 新專案首選 | 異構資料庫整合 |
| 錯誤 | 原因 | 解決 |
|---|---|---|
| Unable to connect to any of the specified MySQL hosts | IP/Port/防火牆/bind-address | 檢查 3306 通達性、my.cnf bind-address=0.0.0.0 |
| Authentication plugin 'caching_sha2_password' not supported | MySQL 8.0 新認證插件 | 升級 MySql.Data 8.0+ 或建立用戶指定 `mysql_native_password` |
| Character set 'utf8mb4' not supported | 驅動版本過舊 | 升級驅動至 6.10+ / 8.0+ |