MySQL 已成 Google、AP、NASA 等大型組織生產選擇,不僅因免費,更因成熟生態。本文梳理 .NET 平台對接 MySQL 的三大驅動選擇、核心命名空間與類別、連線與基本操作範式。
.NET 三大 MySQL 驅動選擇
| 驅動 | 性質 | 來源 | 特點 |
| MySQL Connector/Net (原 ByteFX.Data) | 官方、開源、免費 | MySQL 官網 | 純 C# 實現、無原生依賴、NuGet 直裝、文檔完整、**首選** |
| MySQLDirect .NET Data Provider (Core Lab / Devart) | 商業、付費 | Devart | 效能調優、設計時支援、進階功能、需授權 |
| Mono MySQL Provider | 開源、跨平台 | Mono 專案 | Linux/macOS 上 Mono 運行 .NET 應用連 MySQL 使用 |
核心命名空間與類別速查
using MySql.Data.MySqlClient; // 引入命名空間
| 類別 | 核心職責 | 常用成員 |
MySqlConnection | 管理與 MySQL 伺服器/資料庫的連線 | ConnectionString、Open()/Close()、BeginTransaction()、ChangeDatabase() |
MySqlCommand | 向伺服器發送 SQL 指令/預存程序 | CommandText、Parameters、ExecuteReader/NonQuery/Scalar()、Prepare() |
MySqlDataReader | 唯讀、順向、流式讀取結果集 | Read()、GetInt32/GetString/...(ordinal)、HasRows、Close() |
MySqlDataAdapter | 橋接 DataSet 與資料庫,批次填充/更新 | Fill(DataSet)、Update(DataSet)、Select/Insert/Update/DeleteCommand |
MySqlException | MySQL 專屬例外,含錯誤碼 | Number (MySQL Error Code)、Message |
MySqlParameter | 參數化查詢,防注入、型別安全 | ParameterName、MySqlDbType、Value、Direction |
基礎連線與查詢範式 (C#)
string connStr = "Server=127.0.0.1;Port=3306;Database=testdb;Uid=app;Pwd=secret;SslMode=Preferred;";
using (var conn = new MySqlConnection(connStr))
{
conn.Open();
// 參數化查詢
using (var cmd = new MySqlCommand("SELECT id, name FROM users WHERE status=@st LIMIT 10", conn))
{
cmd.Parameters.AddWithValue("@st", 1);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader.GetInt32(0)}: {reader.GetString(1)}");
}
}
}
// 異步支援 (Connector/Net 6.10+)
// await conn.OpenAsync();
// await reader.ReadAsync();
}
連線字串關鍵參數
SslMode=Preferred|Required|VerifyCA|VerifyFull|None:生產環境建議 Required/VerifyCA。
ConnectionTimeout:連線逾時秒數(預設 15)。
DefaultCommandTimeout:指令逾時(預設 30 秒,長查詢需調大)。
Pooling=true;MinPoolSize=0;MaxPoolSize=100:連線池預設開啟,高併發調大 MaxPoolSize。
CharSet=utf8mb4:確保完整 Unicode 支援(含 Emoji)。
進階主題導引
- Entity Framework Core + Pomelo.EntityFrameworkCore.MySQL:現代 .NET ORM 首選,支援 LINQ、遷移、變更追蹤。
- Dapper:輕量 Micro-ORM,手寫 SQL、效能極致、搭配
MySqlConnection 直用。
- 備份/還原自動化:
MySqlBackup.NET 程式化執行 mysqldump 流。
- 效能調優:
MySqlCommand.Prepare() 伺服器端預編譯、批次 ExecuteNonQuery、避免 SELECT *、善用覆蓋索引。
遷移提醒:舊版 ByteFX / MySql.Data 1.x 代碼
- 命名空間舊為
ByteFX.Data.MySqlClient,新版統一 MySql.Data.MySqlClient。
- 屬性名稱變更:
Host→Server、UserId→Uid、Password→Pwd。
- 請直接遷移至最新 Connector/Net (8.0+),NuGet 套件
MySql.Data 或 MySqlConnector(社區高效能替代品)。