首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

C# 連接 MySQL 實戰:MySqlConnector 與 MySqlDriverCS 兩種驅動方案完整對比

     編輯:Java 相關知識

C# 操作 MySQL 兩大主流驅動

.NET 生態中操作 MySQL 主要有兩種成熟方案:官方 MySqlConnector (原 MySQL Connector/NET) 和社區驅動 MySqlDriverCS。本文通過完整代碼示例對比兩者的配置、API 差異與使用體驗。

方案一:MySqlConnector (官方推薦,現代首選)

1. 獲取與安裝

  • NuGet:Install-Package MySqlConnector(推薦,跨平台、高性能、活躍維護)
  • 或官方:MySql.Data (Oracle 維護,僅 Windows、更新較慢)

2. 完整代碼示例

using System;
using MySqlConnector; // 或 MySql.Data.MySqlClient

namespace MySqlDemo {
    class Program {
        static void Main(string[] args) {
            // 連接字符串構建
            var connStr = "Server=127.0.0.1;Port=3306;Database=student;Uid=root;Pwd=root;Charset=utf8mb4;SslMode=Preferred;";
            
            using (var conn = new MySqlConnection(connStr)) {
                try {
                    conn.Open();
                    Console.WriteLine("連接成功!");
                    
                    // 查詢示例
                    const string sql = "SELECT * FROM stuinfo";
                    using (var cmd = new MySqlCommand(sql, conn))
                    using (var reader = cmd.ExecuteReader()) {
                        while (reader.Read()) {
                            // 獲取數據:按索引或列名
                            Console.WriteLine($"{reader["id"]}\t{reader["first_name"]}\t{reader["last_name"]}\t{reader["Birthdate"]}");
                        }
                    }
                    
                    // 參數化插入示例
                    const string insertSql = "INSERT INTO stuinfo(first_name, last_name, Birthdate) VALUES(@fn, @ln, @bd)";
                    using (var cmd = new MySqlCommand(insertSql, conn)) {
                        cmd.Parameters.AddWithValue("@fn", "Alice");
                        cmd.Parameters.AddWithValue("@ln", "Johnson");
                        cmd.Parameters.AddWithValue("@bd", new DateTime(1995, 3, 15));
                        int rows = cmd.ExecuteNonQuery();
                        Console.WriteLine($"插入 {rows} 行");
                    }
                    
                } catch (Exception ex) {
                    Console.WriteLine("錯誤: " + ex.Message);
                }
            } // 自動釋放連接
            
            Console.ReadKey();
        }
    }
}

3. 核心優勢

  • 原生 .NET Core / .NET 5+ 支持:跨平台運行 (Linux/macOS/Windows)
  • 異步 API 完整:OpenAsync、ExecuteReaderAsync、ExecuteNonQueryAsync
  • 連接池內置:連接字符串 Pooling=true(默認開啟)
  • 參數化查詢防注入:@param 語法,類型安全
  • 活躍社區:GitHub 開源,問題響應快

方案二:MySqlDriverCS (舊版社區驅動,僅作了解)

1. 獲取方式

  • SourceForge:MySQLDriverCS.dll
  • 項目引用:右鍵「添加引用」→ 瀏覽選中 DLL

2. 代碼示例

using System;
using System.Data; // 需要引用
using MySQLDriverCS;

namespace MySqlDriverDemo {
    class Program {
        static void Main(string[] args) {
            // 連接字符串構建器
            var connStr = new MySQLConnectionString("127.0.0.1", "student", "root", "root", 3306).AsString;
            
            using (var conn = new MySQLConnection(connStr)) {
                try {
                    conn.Open();
                    Console.WriteLine("連接成功!");
                    
                    using (var cmd = new MySQLCommand("SELECT * FROM stuinfo", conn))
                    using (var reader = cmd.ExecuteReader()) {
                        while (reader.Read()) {
                            Console.WriteLine($"{reader.GetString(0)}\t{reader.GetString(1)}\t{reader.GetString(2)}\t{reader.GetString(3)}");
                        }
                    }
                } catch (Exception ex) {
                    Console.WriteLine("錯誤: " + ex.Message);
                }
            }
            Console.ReadKey();
        }
    }
}

3. 局限性

  • 僅支持 .NET Framework (Windows)
  • 長期未更新,不支持 .NET Core/.NET 5+
  • 無異步 API,無連接池配置
  • API 設計較老舊(如 GetString(index) 強制按索引)

兩大驅動深度對比

維度MySqlConnector (推薦)MySqlDriverCS (不推薦新項目)
平台支持.NET Framework / .NET Core / .NET 5+ / Mono僅 .NET Framework
包管理NuGet (MySqlConnector / MySql.Data)手動引用 DLL
異步支持完整異步 API無
連接池內置,高度可配置無/基礎
參數綁定@paramName (命名參數)? 或 位置參數
數據讀取reader["colName"] / reader.GetFieldValue<T>()reader.GetString(index) 等強類型按索引
維護狀態活躍 (GitHub 開源)停止維護
性能高 (Span/Memory 優化)一般

最佳實踐建議

  1. 新項目強制使用 MySqlConnector:dotnet add package MySqlConnector
  2. 連接字符串關鍵參數:
    • Charset=utf8mb4:支持 emoji/完整 Unicode
    • SslMode=Preferred:生產環境建議 Required 並配置憑證
    • Pooling=true;MinPoolSize=5;MaxPoolSize=100:根據並發調整
  3. 始終使用參數化查詢:杜絕字符串拼接 SQL
  4. using 模式管理資源:連接、命令、讀取器自動 Dispose
  5. 異步編程:Web API 中使用 await cmd.ExecuteReaderAsync() 釋放線程
  6. Dapper/Entity Framework Core:上層 ORM 進一步簡化數據訪問代碼

遷移指南:從 MySqlDriverCS 到 MySqlConnector

舊代碼新代碼
MySQLConnectionMySqlConnection
MySQLCommandMySqlCommand
MySQLConnectionString(...).AsString標準連接字符串或 MySqlConnectionStringBuilder
reader.GetString(index)reader.GetString("colName") 或 reader["colName"]
無異步await conn.OpenAsync() 等

總結

C# 操作 MySQL 的現代標準答案是 MySqlConnector(NuGet 包名 MySqlConnector)。它提供跨平台支持、完整異步 API、高性能連接池、優雅的參數綁定和活躍的社區維護。MySqlDriverCS 作為歷史產物僅用於維護極老舊 .NET Framework 項目。新項目請直接採用 MySqlConnector,並配合 Dapper 或 EF Core 進一步提升開發效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved