using System; using System.Linq; using System.Data; using System.Configuration; using System.Data.Common; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Text; using Wellan.Data; using Wellan.Common; /// /// BprjDAC 的摘要描述 /// [DataObject(true)] public class BprjDAC : Wellan.Data.WDAC { public BprjDAC() { } public BprjDAC(string connectionConfig, string connectionConfigName) : this() { this._connectionConfig = connectionConfig; this._connectionConfigName = connectionConfigName; } public BprjDAC(WQuery query) { this._query = query; } private const string LastYearExpr = "(SELECT TOP 1 BPYER FROM BPAA WHERE BPAA.BPPNM = BPRJ.BPPNM ORDER BY BPYER DESC)"; /// /// 客戶專案 Grid 分頁查詢 /// [DataObjectMethod(DataObjectMethodType.Select)] public DataTable SelectPage(int startRowIndex, int maximumRows, string BPNUM, string BPPNM, string BPPME) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPNUM, BPPNM, BPPME); cmd.CommandText = String.Format( @"SELECT * FROM ( SELECT X.*, ROW_NUMBER() OVER (ORDER BY LAST_YEAR DESC, BPNUM, BPPNM) AS ROWID FROM ( SELECT *, {0} LAST_YEAR FROM BPRJ WHERE 1=1 {1} ) X ) AS TMP WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS ORDER BY ROWID", LastYearExpr, 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 BPNUM, string BPPNM, string BPPME) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPNUM, BPPNM, BPPME); cmd.CommandText = String.Format("SELECT COUNT(*) FROM BPRJ WHERE 1=1 {0}", filter.ToString()); return WDAC.GetInt32Value(Query.ExecuteScalar(cmd)); } /// /// 取得指定專案在查詢結果中的序號 (0 起算) /// public int SelectBPRJIndex(string targetBPNUM, string targetBPPNM, string BPNUM, string BPPNM, string BPPME) { DbCommand cmd = Query.NewCommand(); StringBuilder filter = new StringBuilder(); BuildFilter(filter, cmd, BPNUM, BPPNM, BPPME); cmd.CommandText = String.Format( @"SELECT ROWID - 1 FROM ( SELECT X.BPNUM, X.BPPNM, ROW_NUMBER() OVER (ORDER BY X.LAST_YEAR DESC, X.BPNUM, X.BPPNM) AS ROWID FROM ( SELECT BPNUM, BPPNM, {0} LAST_YEAR FROM BPRJ WHERE 1=1 {1} ) X ) AS TMP WHERE BPNUM = @TARGET_BPNUM AND BPPNM = @TARGET_BPPNM", LastYearExpr, filter.ToString()); cmd.Parameters.Add(Query.NewParameter("TARGET_BPNUM", targetBPNUM)); cmd.Parameters.Add(Query.NewParameter("TARGET_BPPNM", targetBPPNM)); object o = Query.ExecuteScalar(cmd); return (o is Int32 || o is Int64) ? WDAC.GetInt32Value(o) : -1; } /// /// 組出客戶專案 Grid 的查詢條件 (與舊 AddSearch 行為一致) /// private void BuildFilter(StringBuilder sb, DbCommand cmd, string BPNUM, string BPPNM, string BPPME) { if (!string.IsNullOrEmpty(BPNUM)) { sb.Append(" AND BPNUM LIKE @BPNUM1 "); cmd.Parameters.Add(Query.NewParameter("BPNUM1", BPNUM + "%")); } if (!string.IsNullOrEmpty(BPPNM)) { sb.Append(" AND BPPNM LIKE @BPPNM1 "); cmd.Parameters.Add(Query.NewParameter("BPPNM1", BPPNM + "%")); } if (!string.IsNullOrEmpty(BPPME)) { sb.Append(" AND BPPME LIKE @BPPME1 "); cmd.Parameters.Add(Query.NewParameter("BPPME1", "%" + BPPME + "%")); } } }