// // 這個檔案是 火車票價 資料表的資料存取類別 檔案二 // 您可以修改這個檔案,加入您自訂的屬性與方法 // using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Linq; using WebLib; using System.Data.SqlClient; namespace Education { /// /// 火車票價 資料存取類別 /// public partial class DAC_火車票價 : WebLib.DAC { #region 自動產生的資料存取方法 /// /// InsertOne 之前會執行此方法 /// 在這裡可以做一些檢查或是自動編號等動作 /// 回傳 false 會打斷 InsertOne 的執行 /// protected virtual bool BeforeInsertOne(火車票價Item value) { return true; } /// /// InsertOne 之後會執行此方法 /// protected virtual void AfterInsertOne(火車票價Item value) { } /// /// InsertOne 發生錯誤時會執行此方法 /// ///錯誤是否已經處理妥當 protected virtual void OnInsertOneError(Exception error, out bool handled) { handled = false; } /// /// UpdateOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 UpdateOne 的執行 /// protected virtual bool BeforeUpdateOne(火車票價Item value) { return true; } /// /// UpdateOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 UpdateOne 的執行 /// protected virtual bool BeforeUpdateOne(火車票價Item value, 火車票價Item original_value) { return true; } /// /// UpdateOne 之後會執行此方法 /// protected virtual void AfterUpdateOne(火車票價Item value) { } /// /// UpdateOne 之後會執行此方法 /// protected virtual void AfterUpdateOne(火車票價Item value, 火車票價Item original_value) { } /// /// UpdateOne 發生錯誤時會執行此方法 /// ///錯誤是否已經處理妥當 protected virtual void OnUpdateOneError(Exception error, out bool handled) { handled = false; } /// /// DeleteOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 DeleteOne 的執行 /// protected virtual bool BeforeDeleteOne(火車票價Item value) { return true; } /// /// DeleteOne 之後會執行此方法 /// protected virtual void AfterDeleteOne(火車票價Item value) { } /// /// DeleteOne 之前會執行此方法 /// 在這裡可以做一些檢查 /// 回傳 false 會打斷 DeleteOne 的執行 /// protected virtual bool BeforeDeleteOne(int 編號, int DB_APPNO) { return true; } /// /// DeleteOne 之後會執行此方法 /// protected virtual void AfterDeleteOne(int 編號, int DB_APPNO) { } /// /// DeleteOne 發生錯誤時會執行此方法 /// ///錯誤是否已經處理妥當 protected virtual void OnDeleteOneError(Exception error, out bool handled) { handled = false; } #endregion // 有另外加上去的屬性及方法,請加在這裡 public NameValueList 查詢版本號List() { NameValueList result = new NameValueList(); DbCommand cmdSelect = NewCommand(); // SQL 查詢:取得所有不同的版本、生效日期、以及該版本最後的建檔和修改日期 cmdSelect.CommandText = $@" select 版本號, max(生效日期) as 生效日期, max(DB_CRDAT) as 建檔日期, max(DB_TRDAT) as 修改日期 from {_tableName} group by 版本號 order by 版本號 desc"; var dt = Select(cmdSelect); foreach (DataRow row in dt.Rows) { int versionId = DAC.GetInt32(row["版本號"]); DateTime effectiveDate = DAC.GetDateTime(row["生效日期"]); // 取得修改日期,如果沒有則使用建檔日期 DateTime modifyDate = row["修改日期"] != DBNull.Value ? DAC.GetDateTime(row["修改日期"]) : DAC.GetDateTime(row["建檔日期"]); string displayText = $"第 {versionId} 版 - 生效日期 {effectiveDate:yyyy-MM-dd} - 修改時間 {modifyDate:yyyy-MM-dd HH:mm:ss}"; result.Add(displayText, versionId.ToString()); } return result; } public int 查詢版本號(DateTime? date) { if (!date.HasValue) { date = PublicVariable.TaiwanNow; } DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = $"select top 1 版本號 from {_tableName} where 生效日期 < @生效日期 order by 生效日期 desc"; AddParam(cmdSelect, "生效日期", date.Value); if (ExecuteScalar(cmdSelect, out int value)) { return value; } return 0; } public NameValueList 查詢起站(string key) { var 版本號 = 查詢版本號(null); NameValueList result = new NameValueList(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); var sql = $"select distinct 起站 Name, 起站 Value from {_tableName} where 版本號=@版本號 "; if (!string.IsNullOrEmpty(key)) { sql += " and 起站 like @起站 "; AddParam(cmdSelect, "起站", $"%{key}%"); } AddParam(cmdSelect, "版本號", 版本號); cmdSelect.CommandText = sql + " order by 起站"; Select(cmdSelect, ref list); return result; } public NameValueList 查詢迄站(string key) { var 版本號 = 查詢版本號(null); NameValueList result = new NameValueList(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); var sql = $"select distinct 迄站 Name, 迄站 Value from {_tableName} where 版本號=@版本號 "; if (!string.IsNullOrEmpty(key)) { sql += " and 迄站 like @迄站 "; AddParam(cmdSelect, "迄站", $"%{key}%"); } AddParam(cmdSelect, "版本號", 版本號); cmdSelect.CommandText = sql + " order by 迄站"; Select(cmdSelect, ref list); return result; } public int 查詢票價(string 起站, string 迄站) { var 版本號 = 查詢版本號(null); DbCommand cmdSelect = NewCommand($"select 票價 from {_tableName} where 版本號=@版本號 and 起站=@起站 and 迄站=@迄站"); AddParam(cmdSelect, "版本號", 版本號); AddParam(cmdSelect, "起站", 起站); AddParam(cmdSelect, "迄站", 迄站); if (ExecuteScalar(cmdSelect, out int value)) { return value; } return 0; } /// /// 給查詢畫面用的 Select 方法 /// [DataObjectMethod(DataObjectMethodType.Select)] public 火車票價List 查詢票價表(int? 版本號) { 火車票價List result = new 火車票價List(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = @"select A.*, B.站碼 起站站碼, C.站碼 迄站站碼 from 火車票價 A join 火車站 B on A.起站=B.站名 join 火車站 C on A.迄站=C.站名 where A.版本號=@版本號 order by 起站站碼, 迄站站碼"; AddParam(cmdSelect, "版本號", 版本號); Select(cmdSelect, ref list); return result; } } /// ///火車票價 資料集合類別 /// public partial class 火車票價List : List<火車票價Item> { // 有另外加上去的屬性及方法,請加在這裡 } /// ///火車票價 資料紀錄類別 /// public partial class 火車票價Item { // 有另外加上去的屬性及方法,請加在這裡 public string 起站站碼 { get; set; } public string 迄站站碼 { get; set; } } }