封裝資料庫操作細節 (連線字串、SQL 組裝、參數化),提供 Add、Update、Find 等方法供 BLL 呼叫,完全隱藏資料庫結構。
using System;
using System.Data.OleDb;
using System.Data;
namespace _3TierArchitecture
{
public class DACustomer
{
private OleDbConnection cnn;
private const string CnnStr =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\...\\customer.mdb;";
private const string Table = "tblCustomer";
private const string ColID = "CUS_ID", ColLName = "CUS_L_NAME",
ColFName = "CUS_F_NAME", ColTel = "CUS_TEL", ColAddr = "CUS_ADDRESS";
public DACustomer() { }
public DACustomer(BOCustomer cus) { /* 保留 BLL 參考 */ }
public void Add(BOCustomer cus)
{
string sql = BuildInsertSql(cus);
OpenCnn();
new OleDbCommand(sql, cnn).ExecuteNonQuery();
CloseCnn();
}
public void Update(BOCustomer cus)
{
string sql = $@"UPDATE {Table} SET
{ColLName}='{cus.LName}', {ColFName}='{cus.FName}',
{ColAddr}='{cus.Address}', {ColTel}='{cus.Tel}'
WHERE {ColID}='{cus.cusID}'";
OpenCnn();
new OleDbCommand(sql, cnn).ExecuteNonQuery();
CloseCnn();
}
public DataSet Find(string id)
{
DataSet ds = null;
try
{
OpenCnn();
string sql = $"SELECT * FROM {Table} WHERE {ColID}='{id}'";
OleDbDataAdapter da = new OleDbDataAdapter(sql, cnn);
ds = new DataSet();
da.Fill(ds, Table);
}
catch (Exception ex) { /* 記錄錯誤 */ }
finally { CloseCnn(); }
return ds;
}
private void OpenCnn() { cnn = new OleDbConnection(CnnStr); cnn.Open(); }
private void CloseCnn() { cnn.Close(); }
private string BuildInsertSql(BOCustomer cus)
{
return $@"INSERT INTO {Table} ({ColID},{ColLName},{ColFName},{ColAddr},{ColTel})
VALUES ('{cus.cusID}','{cus.LName}','{cus.FName}','{cus.Address}','{cus.Tel}')";
}
}
}
OleDbParameter。using (var cnn = new OleDbConnection(...)) 確保釋放。app.config/appsettings.json。