.NET 應用連接 MySQL 主流有兩套方案:官方推薦的 MySqlConnector(原 MySql.Data)與輕量級的 MySqlDriverCS。本文提供兩者完整程式碼範例、效能特性對比、遷移建議與最佳實踐模式。
NuGet 套件:MySqlConnector (推薦) 或 MySql.Data (舊版官方)
using System;
using System.Data;
using MySqlConnector; // 或 using MySql.Data.MySqlClient;
public class MySqlDemo
{
private readonly string _connStr = "Server=localhost;Database=testdb;Uid=root;Pwd=123456;Charset=utf8mb4;SslMode=Preferred;";
public void QueryData()
{
using var conn = new MySqlConnection(_connStr);
conn.Open();
using var cmd = new MySqlCommand("SELECT id, name, email FROM users WHERE status = @status ORDER BY id DESC LIMIT 10", conn);
cmd.Parameters.AddWithValue("@status", 1);
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"ID: {reader.GetInt32(0)}, Name: {reader.GetString(1)}, Email: {reader.GetString(2)}");
}
}
public int ExecuteNonQuery(string sql, params MySqlParameter[] parameters)
{
using var conn = new MySqlConnection(_connStr);
using var cmd = new MySqlCommand(sql, conn);
if (parameters != null) cmd.Parameters.AddRange(parameters);
conn.Open();
return cmd.ExecuteNonQuery();
}
}
| 參數 | 說明 | 建議值 |
|---|---|---|
| Server | 主機位址 | localhost / 192.168.1.100 |
| Port | 埠號 | 3306 (預設可省略) |
| Database | 資料庫名 | your_db |
| Uid/Pwd | 帳號/密碼 | 專用帳號、強密碼 |
| Charset | 字元集 | utf8mb4 (支援 emoji) |
| SslMode | SSL 模式 | Preferred / Required / None |
| ConnectionReset | 從連線池取出時重置 | true (避免髒讀) |
| MaxPoolSize/MinPoolSize | 連線池大小 | 100/0 (視負載調整) |
| AllowUserVariables | 允許用戶變數 | true (需用 @var 時) |
| 維度 | MySqlConnector | MySqlDriverCS |
|---|---|---|
| 維護狀態 | 活躍開源,每月更新 | 2012 年後停止更新 |
| 目標框架 | .NET Framework 4.6.1+ / .NET Standard 2.0+ / .NET 5-8 | .NET Framework 2.0-4.x |
| 效能 | 高 (管線化、非同步 IO、Span 支援) | 基礎 |
| 功能完整度 | 完整支援 JSON、GIS、Prepared Statement 重用、X Protocol | 基礎 CRUD |
| 連線池 | 內建高效連線池 | 簡易實作 |
| 非同步支援 | 完整 async/await | 無 |
| 相依性 | 無額外相依 (純 managed) | 單一 DLL |
| 授權 | MIT | LGPL |
Charset=utf8mb4、SslMode=Preferredcmd.Parameters.AddWithValue()| 問題 | 可能原因 | 解決方案 |
|---|---|---|
| Authentication plugin 'caching_sha2_password' not supported | MySQL 8.0 預設認證插件舊驅動不支援 | 升級 MySqlConnector 2.0+ / 建立用戶指定 mysql_native_password |
| SSL Connection error | 伺服器啟用 SSL 但客戶端未配置 | 連線字串加 `SslMode=Preferred` 或 `SslMode=Required` + 憑證 |
| Connection timeout / Pool exhausted | 連線洩漏 / 池太小 / 查詢過慢 | 檢查 using 區塊 / 增加 MaxPoolSize / 優化查詢 / 監控泄漏 |
| Character set 'utf8mb4' unsupported | MySQL 版本過舊 (< 5.5.3) | 升級 MySQL / 改用 utf8 (不支援 emoji) |
現代 .NET 開發請直接選擇 MySqlConnector,配合 Dapper 或 Entity Framework Core 使用,能獲得最佳效能、功能完整度與長期維護保障。舊專案維護期滿後應規劃遷移路線圖。