需求:C 盤根目錄有 nwind.mdb(Access 北風資料庫)
using System;
using System.Data;
using System.Data.OleDb;
// 抽象類別:定義演算法骨架
abstract class DataObject
{
public abstract void Connect();
public abstract void Select();
public abstract void Process();
public abstract void Disconnect();
// 模板方法:固定流程
public void Run()
{
Connect();
Select();
Process();
Disconnect();
}
}
// 具體類別:實作各步驟
class CustomerDataObject : DataObject
{
private string connStr = "provider=Microsoft.JET.OLEDB.4.0; data source=c:\\nwind.mdb";
private string cmdStr;
private DataSet ds;
public override void Connect() { /* OleDb 連線無需額外動作 */ }
public override void Select()
{
cmdStr = "select CompanyName from Customers";
OleDbDataAdapter da = new OleDbDataAdapter(cmdStr, connStr);
ds = new DataSet();
da.Fill(ds, "Customers");
}
public override void Process()
{
DataTable dt = ds.Tables["Customers"];
foreach (DataRow row in dt.Rows)
Console.WriteLine(row["CompanyName"]);
}
public override void Disconnect() { /* 連線池自動管理 */ }
}
// 客戶端
public class TemplateMethodApp
{
public static void Main()
{
CustomerDataObject c = new CustomerDataObject();
c.Run(); // 一鍵執行完整流程
}
}
Run() 確保 Connect→Select→Process→Disconnect 順序不可變