ASP.NET 應用連接 MySQL 有多種成熟方案,各有適用場景與優劣。本文從部署模式、代碼侵入性、維護成本三個維度,系統對比三大主流方案並提供生產級代碼模板。
| 維度 | Connector/NET 直引用 | Web.config 註冊 | ODBC 系統數據源 | ODBC 驅動字符串 |
|---|---|---|---|---|
| 部署方式 | DLL 隨項目部署 | DLL 放 Bin 目錄 | 需服務器安裝驅動 | 需服務器安裝驅動 |
| 代碼侵入性 | 需引用命名空間 | 無代碼變更 | 使用 OdbcConnection | 使用 OdbcConnection |
| 適用場景 | 新項目、全控制 | 老項目擴展、無法重編譯 | 多數據源統一管理 | 不想配置 DSN 時 |
| 連接字符串 | 代碼中硬編碼/配置節點 | web.config connectionStrings | DSN=名稱 | Driver=...;Server=...;UID=...;PWD=... |
| 權限要求 | 低 | 低 | 高(系統級配置) | 高 |
Install-Package MySql.Data 或手動引用 MySql.Data.dllusing MySql.Data.MySqlClient;
string connStr = "Server=172.168.0.234;Database=testss;Uid=root;Pwd=shinevod;";
string sql = "SELECT * FROM sms_outbox";
using (var conn = new MySqlConnection(connStr))
using (var adapter = new MySqlDataAdapter(sql, conn)) {
var ds = new DataSet();
adapter.Fill(ds);
// 處理 ds.Tables[0]
Response.Write(ds.GetXml());
}
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D" />
</assemblies>
</compilation>
</system.web>
using (var adapter = new MySql.Data.MySqlClient.MySqlDataAdapter(sql, connStr)) { ... }
string dsn = "DSN=mysqltest;";
string sql = "SELECT * FROM sms_outbox";
using (var adapter = new OdbcDataAdapter(sql, dsn)) {
var ds = new DataSet();
adapter.Fill(ds);
Response.Write(ds.GetXml());
}
string connStr = "Driver={MySQL ODBC 5.2 Unicode Driver};" +
"Server=172.168.0.234;Database=testss;UID=root;PWD=shinevod;";
using (var adapter = new OdbcDataAdapter(sql, connStr)) { ... }
web.config <connectionStrings>,加密敏感節點Pooling=true;Min Pool Size=5;Max Pool Size=100cmd.Parameters.AddWithValue("@id", id) 防注入MySqlException,檢查 Number 錯誤碼(1045 認證失敗、1042 無法連接)Charset=utf8mb4; 解決 Emoji 存儲| 現象 | 原因 | 解決 |
|---|---|---|
| 「Unable to connect to any of the specified MySQL hosts」 | 防火牆/bind-address/權限 | 檢查 3306 端口、my.cnf bind-address=0.0.0.0、GRANT 權限 |
| 「Authentication plugin 'caching_sha2_password' not supported」 | MySQL 8.0 默認認證插件舊驅動不支持 | 升級 Connector/NET 8.0+ 或創建用戶指定 mysql_native_password |
| 中文亂碼 | 字符集不匹配 | 連接串 Charset=utf8mb4、表/列 CHARSET=utf8mb4 |
新項目首選 Connector/NET + 依賴注入 + 配置外部化;老項目無法重編譯時用 Web.config 註冊;異構數據源統一接入考慮 ODBC。核心原則:連接字符串配置化、訪問代碼參數化、異常信息結構化。