首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 連接 MySQL 報「找不到 libmySQL.dll」:驅動安裝與部署完整指南

     編輯:程式設計綜合問答

錯誤原因

DllNotFoundException: Unable to load DLL 'libmySQL.dll' 表示 **MySQL Connector/NET 非託管依賴缺失**。雖然核心是 MySql.Data.dll (Managed),但底層仍依賴 libmysql.dll (Native)。

解決方案對比

方案一:NuGet 安裝 MySql.Data (推薦,最簡單)

# Package Manager Console
Install-Package MySql.Data -Version 8.0.33
  • ✅ 自動包含原生 DLL
  • ✅ 支援 .NET Framework / .NET Core / .NET 5+
  • ✅ 部署時自動複製到輸出目錄

方案二:使用 MySqlConnector (效能更好、全託管)

Install-Package MySqlConnector
  • ✅ 純 C# 實現,**完全不依賴 libmysql.dll**
  • ✅ 非同步支援更完善、記憶體佔用更低
  • ✅ 官方推薦的現代替代品

方案三:手動安裝 MySQL Connector/NET (不推薦)

  1. 下載 mysql-connector-net-8.0.xx.msi
  2. 安裝至 GAC 或指定目錄
  3. 專案引用 MySql.Data.dll
  4. 缺點:部署機器也需安裝 MSI,易遺漏

連接字串標準寫法

// 標準格式
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 確保釋放)

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)
  • ☑ 若用 MySql.Data:同目錄有 libmysql.dll (NuGet 會自動複製)
  • ☑ 目標機器安裝 .NET Runtime 對應版本
  • ☑ 防火牆開放 3306 埠,MySQL bind-address = 0.0.0.0
  • ☑ 資料庫用戶授權:GRANT ALL ON wsnvlab.* TO 'root'@'%' IDENTIFIED BY '123456';

避坑指南

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤做法後果正確做法
只複製 MySql.Data.dll運行時找不到 libmysql.dll用 NuGet 管理依賴
連接字串寫死在程式碼部署環境不同需改碼重編譯放入 appsettings.json / web.config
不使用 using / try-finally連接洩漏,耗盡連接池嚴格 using 模式