DllNotFoundException: Unable to load DLL 'libmySQL.dll' 表示 **MySQL Connector/NET 非託管依賴缺失**。雖然核心是 MySql.Data.dll (Managed),但底層仍依賴 libmysql.dll (Native)。
# Package Manager Console
Install-Package MySql.Data -Version 8.0.33
Install-Package MySqlConnector
mysql-connector-net-8.0.xx.msiMySql.Data.dll// 標準格式
string connStr = "Server=localhost;Database=wsnvlab;Uid=root;Pwd=123456;";
// 連接池優化 (生產環境建議)
string connStr = "Server=localhost;Database=wsnvlab;Uid=root;Pwd=123456;" +
"Min Pool Size=5;Max Pool Size=100;Connection Lifetime=300;";
using MySql.Data.MySqlClient; // 或 using MySqlConnector;
public MySqlConnection GetConnection() {
string connStr = "Server=localhost;Database=wsnvlab;Uid=root;Pwd=123456;";
var conn = new MySqlConnection(connStr);
try {
conn.Open();
return conn;
} catch (MySqlException ex) {
conn.Dispose();
throw new ApplicationException("資料庫連接失敗: " + ex.Message, ex);
}
}
// 使用範圍
using (var conn = GetConnection())
using (var cmd = new MySqlCommand("SELECT * FROM users", conn))
using (var reader = cmd.ExecuteReader()) {
while (reader.Read()) {
Console.WriteLine(reader["username"]);
}
}
bin/Debug/netX.Y/ 下有 MySql.Data.dll (或 MySqlConnector.dll)libmysql.dll (NuGet 會自動複製)bind-address = 0.0.0.0GRANT ALL ON wsnvlab.* TO 'root'@'%' IDENTIFIED BY '123456';| 錯誤做法 | 後果 | 正確做法 |
|---|---|---|
| 只複製 MySql.Data.dll | 運行時找不到 libmysql.dll | 用 NuGet 管理依賴 |
| 連接字串寫死在程式碼 | 部署環境不同需改碼重編譯 | 放入 appsettings.json / web.config |
| 不使用 using / try-finally | 連接洩漏,耗盡連接池 | 嚴格 using 模式 |