在內容管理、電商分類等系統中,「無限層級分類」是常見需求。本文分享一套基於 C# 的完整實作,支援 Access 與 SQL Server 雙資料庫,涵蓋分類的新增、移動、排序、刪除、樹狀顯示等核心功能,並提供統一介面,部署與使用極為簡單。
核心資料表需包含以下欄位(具體名稱可依專案調整):


專案核心由三個類別檔案組成:
idb 介面,支援 Access/SQL Server 切換using System;
using System.Data;
namespace catalog {
/// <summary>
/// idb 介面定義
/// </summary>
public interface idb {
IDbConnection getcon { get; }
string constr { get; }
IDbCommand command(string sql);
int exesql(string sql);
object getvalue(string sql);
void close();
DataTable getdata(string sql);
IDataReader getdr(string sql);
}
}
關鍵特點:
ConfigurationSettings.AppSettings["dbtype"] 讀取資料庫類型("SqlServer" 或 "Access")SqlConnection/OleDbConnection 及 SqlCommand/OleDbCommand// 節錄關鍵邏輯
public class db : idb {
private IDbConnection con;
private IDbCommand cm;
private string dbtype = "Access";
public db() {
dbtype = ConfigurationSettings.AppSettings["dbtype"] ?? "";
if (dbtype.ToLower() == "sqlserver") {
con = new SqlConnection();
cm = new SqlCommand();
} else {
con = new OleDbConnection();
cm = new OleDbCommand();
}
string cnstring = ConfigurationSettings.AppSettings["cnstr"];
con.ConnectionString = cnstring;
open();
cm.Connection = con;
}
// ... 實作 exesql, getvalue, getdata, getdr, close 等方法
}
提供豐富的分類管理功能:
| 方法簽名 | 功能說明 |
|---|---|
deleteAllCatalog(string table) | 清空分類表 |
downClass(string table, int classid) | 分類向下移動一位 |
upClass(string table, int classid) | 分類向上移動一位 |
moveClass(string table, int classid, int target) | 分類移動到指定目標 |
deleteTree(string table, int classid) | 刪除分類樹(含所有子分類) |
list(string table) | 列出分類列表 |
getClassidOrderNum(string table, int classid) | 取得分類排序號 |
checkExist(string table, int classid) | 檢查分類是否存在 |
getChildren(string table, int classid) | 列出某分類所有子分類 |
modiClass(string table, int classid, string classname) | 修改分類名稱 |
classMap(string table, int classid) | 分類導航/麵包屑路徑 |
getClassName(string table, int classid) | 取得分類名稱 |
reset(string table) | 重置所有分類為頂層 |
deleteClass(string table, int classid) | 刪除單一分類 |
itemcreated(Object Sender, RepeaterItemEventArgs e, string ctlname, string ctlname2) | Repeater 列表渲染事件 |
getOptions(string table, int type, int selected) | 生成下拉選單 Options |
addClass(string table, string classname, int parentid) | 新增分類 |
Web.config 中 dbtype 與 cnstr 設定catalog 命名空間,實例化 action 類別即可調用上述方法本程式碼剛開發完成,難免有疏漏或 Bug,歡迎各位指正交流。希望這套無限分類實作能為您的專案節省寶貴開發時間。