提供一個輕量、可重複使用的靜態類別,封裝 OleDbConnection、OleDbCommand、OleDbDataAdapter 等 ADO.NET 物件,支援 ExecuteNonQuery、DataReader、DataSet、DataTable、DataView 五種常見資料操作模式,連線字串從 Web.config 讀取。
<appSettings>
<add key="myconn" value="|DataDirectory|\App_Data\MyDB.mdb" />
</appSettings>
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
public static class AccessHelper
{
private static readonly string ConnStr =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["myconn"]);
// 內部開啟/關閉連線
private static OleDbConnection GetOpenConnection()
{
var conn = new OleDbConnection(ConnStr);
if (conn.State == ConnectionState.Closed) conn.Open();
return conn;
}
// 1. 執行非查詢 SQL (INSERT/UPDATE/DELETE)
public static int ExecuteNonQuery(string sql, params OleDbParameter[] parameters)
{
using (var conn = GetOpenConnection())
using (var cmd = new OleDbCommand(sql, conn))
{
if (parameters != null) cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();
}
}
// 2. 回傳 DataReader (呼叫端需自行關閉)
public static OleDbDataReader ExecuteReader(string sql, params OleDbParameter[] parameters)
{
var conn = GetOpenConnection();
var cmd = new OleDbCommand(sql, conn);
if (parameters != null) cmd.Parameters.AddRange(parameters);
// CommandBehavior.CloseConnection: 關閉 Reader 時自動關閉連線
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
// 3. 回傳 DataSet (離線資料集)
public static DataSet GetDataSet(string sql, params OleDbParameter[] parameters)
{
using (var conn = GetOpenConnection())
using (var da = new OleDbDataAdapter(sql, conn))
{
if (parameters != null) da.SelectCommand.Parameters.AddRange(parameters);
var ds = new DataSet();
da.Fill(ds);
return ds;
}
}
// 4. 回傳 DataTable (單一資料表)
public static DataTable GetDataTable(string sql, params OleDbParameter[] parameters)
{
using (var conn = GetOpenConnection())
using (var da = new OleDbDataAdapter(sql, conn))
{
if (parameters != null) da.SelectCommand.Parameters.AddRange(parameters);
var dt = new DataTable();
da.Fill(dt);
return dt;
}
}
// 5. 回傳 DataView (可排序/篩選的檢視)
public static DataView GetDataView(string sql, params OleDbParameter[] parameters)
{
return GetDataSet(sql, parameters).Tables[0].DefaultView;
}
}
// 參數化查詢防止 SQL Injection
string sql = "SELECT * FROM Users WHERE Age > ? AND City = ?";
var dt = AccessHelper.GetDataTable(sql,
new OleDbParameter("Age", 18),
new OleDbParameter("City", "Taipei"));
foreach (DataRow row in dt.Rows)
Console.WriteLine($"{row["Name"]} - {row["Email"]}");
static OleDbConnection/Command 會導致多執行緒衝突與連線洩漏,改為 using 區塊確保釋放。params OleDbParameter[],杜絕字串拼接 SQL Injection 風險。ref 多載,統一回傳值,符合現代 C# 慣例。Web.config,避免重複 I/O。ASP.NET 2.0~4.8、.NET Framework 專案。.NET Core / 5+ 建議改用 Microsoft.Data.OleDb NuGet 套件,命名空間相同,用法不變。