using MySql.Data.MySqlClient;
using System.Data;
public class MySqlHelper {
private readonly string _connStr = "Server=127.0.0.1;Port=3306;Database=testdb;Uid=root;Pwd=123456;Charset=utf8;";
public DataTable ExecuteQuery(string sql, params MySqlParameter[] parameters) {
using (var conn = new MySqlConnection(_connStr))
using (var cmd = new MySqlCommand(sql, conn)) {
if (parameters != null) cmd.Parameters.AddRange(parameters);
var dt = new DataTable();
try {
conn.Open();
using (var adapter = new MySqlDataAdapter(cmd)) {
adapter.Fill(dt);
}
} catch (MySqlException ex) {
// 記錄日誌
throw new ApplicationException("資料庫操作失敗", ex);
}
return dt;
}
}
public int ExecuteNonQuery(string sql, params MySqlParameter[] parameters) {
using (var conn = new MySqlConnection(_connStr))
using (var cmd = new MySqlCommand(sql, conn)) {
if (parameters != null) cmd.Parameters.AddRange(parameters);
conn.Open();
return cmd.ExecuteNonQuery();
}
}
}
// 使用範例
var helper = new MySqlHelper();
// 參數化查詢防注入
var dt = helper.ExecuteQuery("SELECT * FROM users WHERE age > @age AND status = @status",
new MySqlParameter("@age", 18),
new MySqlParameter("@status", "active"));
foreach (DataRow row in dt.Rows) {
Console.WriteLine($"{row["username"]} - {row["email"]}");
}
| 參數 | 說明 | 範例 |
|---|---|---|
| Server | 主機 IP 或主機名 | 127.0.0.1 |
| Port | 連接埠 | 3306 |
| Database | 資料庫名稱 | mydb |
| Uid/Pwd | 帳號/密碼 | root/123456 |
| Charset | 字元集 (重要!) | utf8 或 utf8mb4 |
| Pooling | 連線池 (預設 true) | true |
| SslMode | SSL 模式 (8.0+ 建議 None/Required) | None |
NuGet 安裝 `MySql.Data.Entity`,`web.config` 註冊 Provider,即可使用 Code First / Database First 開發。