using System; using System.Data; using System.Data.Common; using System.Text; using System.ComponentModel; using Wellan.Data; /// /// 年度科目設定的資料處理類別 /// [DataObject(true)] public class BpabDAC : Wellan.Data.WDAC { public BpabDAC() { } public BpabDAC(string connectionConfig, string connectionConfigName) : this() { this._connectionConfig = connectionConfig; this._connectionConfigName = connectionConfigName; } public BpabDAC(WQuery query) { this._query = query; } /// /// 年度科目設定 Grid 分頁查詢 /// mode: BIG=大類, SMALL=小類, 其他=科目 /// [DataObjectMethod(DataObjectMethodType.Select)] public DataTable SelectPage(int startRowIndex, int maximumRows, string BPPYN, string mode) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPPYN, mode); cmd.CommandText = String.Format( @"SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY {0}) AS ROWID FROM BPAB WHERE 1=1 {1} ) AS TMP WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS ORDER BY ROWID", OrderBy(mode), filter.ToString()); cmd.Parameters.Add(Query.NewParameter("STARTROWINDEX", startRowIndex)); cmd.Parameters.Add(Query.NewParameter("MAXIMUMROWS", maximumRows)); return Query.Select(cmd); } /// /// 年度科目設定 Grid 查詢筆數 /// [DataObjectMethod(DataObjectMethodType.Select)] public int SelectCount(string BPPYN, string mode) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPPYN, mode); cmd.CommandText = String.Format("SELECT COUNT(*) FROM BPAB WHERE 1=1 {0}", filter.ToString()); return WDAC.GetInt32Value(Query.ExecuteScalar(cmd)); } private static string OrderBy(string mode) { if (mode == "BIG" || mode == "SMALL") return "BPPYN, BPCLS, BPORD"; return "BPPYN, BPCLS"; } /// /// 組出年度科目設定 Grid 的查詢條件 (與舊 Search 行為一致) /// private void BuildFilter(StringBuilder sb, DbCommand cmd, string BPPYN, string mode) { if (!string.IsNullOrEmpty(BPPYN)) { sb.Append(" AND BPPYN LIKE @BPPYN1 "); cmd.Parameters.Add(Query.NewParameter("BPPYN1", BPPYN + "%")); } switch (mode) { case "BIG": sb.Append(" AND SUBSTRING(BPACC,3,4) = '0000' "); break; case "SMALL": sb.Append(" AND SUBSTRING(BPACC,3,2) <> '00' AND SUBSTRING(BPACC,5,2) = '00' "); break; default: sb.Append(" AND SUBSTRING(BPACC,3,2) <> '00' AND SUBSTRING(BPACC,5,2) <> '00' "); break; } } }