// // 這個檔案是 MessageQueue 資料表的資料存取類別 檔案一 // 請不要修改這個檔案,重新產生資料存取類別時,這個檔案會被覆蓋掉 // using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Linq; using System.Transactions; using WebLib; using System.Data.SqlClient; namespace 報到系統 { /// /// MessageQueue 資料存取類別 /// [DataObject] public partial class DAC_MessageQueue : WebLib.DAC { private const string _tableName = "[MessageQueue]"; private const string _allFields = "[ID], [CourseID], [Status], [Name], [Mobile], [Subject], [Content], [QRCode], [DB_APPNO], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR]"; private string _orderBy = "[ID]"; private string _select = "select " + _allFields; private string _insert = "[CourseID], [Status], [Name], [Mobile], [Subject], [Content], [QRCode], [DB_APPNO], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR]"; private string _insertBak = "[ID], [CourseID], [Status], [Name], [Mobile], [Subject], [Content], [QRCode], [DB_APPNO], [DB_CRDAT], [DB_CRUSR], [DB_TRDAT], [DB_TRUSR], [DB_TRMOD]"; private string _insertValue = "@CourseID, @Status, @Name, @Mobile, @Subject, @Content, @QRCode, @DB_APPNO, @DB_CRDAT, @DB_CRUSR, @DB_TRDAT, @DB_TRUSR"; private string _insertBakValue = "@ID, @CourseID, @Status, @Name, @Mobile, @Subject, @Content, @QRCode, @DB_APPNO, @DB_CRDAT, @DB_CRUSR, @DB_TRDAT, @DB_TRUSR, @DB_TRMOD"; private string _from = " from " + _tableName + " "; private string _where = " where 1=1 "; private string _order = " order by [ID] "; public DAC_MessageQueue() : base() { } public DAC_MessageQueue(DbConnection conn) : base(conn) { } [DataObjectMethod(DataObjectMethodType.Select)] public MessageQueueList SelectAll(string orderBy = "") { MessageQueueList result = new MessageQueueList(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where + (orderBy == null || orderBy.Length == 0 ? _order : " order by " + orderBy); Select(cmdSelect, ref list); return result; } public int SelectAllCount() { DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = "select count(1) " + _from; int i; ExecuteScalar(cmdSelect, out i); return i; } [DataObjectMethod(DataObjectMethodType.Select)] public MessageQueueList SelectAllPage(int startRowIndex, int maximumRows, string orderBy = "") { MessageQueueList result = new MessageQueueList(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = String.Format("select top {0} * from (", maximumRows) + "select " + _allFields + ", row_number() over (order by " + (orderBy == null || orderBy.Length == 0 ? _orderBy : orderBy) + ") as rowid " + _from + _where + ") as TMP1 where rowid > @startRowIndex "; AddParam(cmdSelect, "startRowIndex", startRowIndex); Select(cmdSelect, ref list); return result; } [DataObjectMethod(DataObjectMethodType.Select)] public MessageQueueList SelectOne(int ID) { MessageQueueList result = new MessageQueueList(); IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where + " and ID = @ID " ; AddParam(cmdSelect, "ID", ID); Select(cmdSelect, ref list); return result; } /// /// 給查詢畫面用的增加 Where 條件的方法 /// private void AddWhere(DbCommand cmdSelect, ref bool noInput, int? CourseID, string Status) { if (CourseID != null) { noInput = false; cmdSelect.CommandText += " and CourseID = @CourseID "; AddParam(cmdSelect, "CourseID", CourseID); } if (Status != null && Status.Length > 0) { noInput = false; cmdSelect.CommandText += " and Status like @Status "; AddParam(cmdSelect, "Status", "%" + Status + "%"); } } /// /// 給查詢畫面用的 Select 方法 /// [DataObjectMethod(DataObjectMethodType.Select)] public MessageQueueList Select(bool noInputReturnAll, int? CourseID, string Status, string orderBy = "") { MessageQueueList result = new MessageQueueList(); bool noInput = true; IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = _select + _from + _where; AddWhere(cmdSelect, ref noInput, CourseID, Status); cmdSelect.CommandText += (orderBy == null || orderBy.Length == 0 ? _order : " order by " + orderBy); if (!noInputReturnAll && noInput) return result; Select(cmdSelect, ref list); return result; } /// /// 給查詢畫面用的 SelectCount 方法 /// [DataObjectMethod(DataObjectMethodType.Select)] public int SelectCount(bool noInputReturnAll, int? CourseID, string Status, string orderBy = "") { bool noInput = true; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = "select count(1) " + _from + _where; AddWhere(cmdSelect, ref noInput, CourseID, Status); if (!noInputReturnAll && noInput) return 0; int i; ExecuteScalar(cmdSelect, out i); return i; } /// /// 給查詢畫面用的 SelectPage 方法 /// [DataObjectMethod(DataObjectMethodType.Select)] public MessageQueueList SelectPage(bool noInputReturnAll, int startRowIndex, int maximumRows, int? CourseID, string Status, string orderBy = "") { MessageQueueList result = new MessageQueueList(); bool noInput = true; IDataList list = result as IDataList; DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = String.Format("select top {0} * from (", maximumRows) + "select " + _allFields + ", row_number() over (order by " + (orderBy == null || orderBy.Length == 0 ? _orderBy : orderBy) + ") as rowid " + _from + _where; AddWhere(cmdSelect, ref noInput, CourseID, Status); cmdSelect.CommandText += ") as TMP1 where rowid > @startRowIndex "; AddParam(cmdSelect, "startRowIndex", startRowIndex); if (!noInputReturnAll && noInput) return result; Select(cmdSelect, ref list); return result; } [DataObjectMethod(DataObjectMethodType.Insert)] public MessageQueueItem InsertOne(MessageQueueItem value) { using (TransactionScope ts = DAC.NewTransactionScope()) { try { if (!BeforeInsertOne(value)) return value; DbCommand cmdInsert = NewCommand(); cmdInsert.CommandText = "insert into [MessageQueue]" + " (" + _insert + ")" + "values " + " (" + _insertValue + ");" + "select @@identity" ; AddParam(cmdInsert, "CourseID", value.CourseID); AddParam(cmdInsert, "Status", value.Status); AddParam(cmdInsert, "Name", value.Name); AddParam(cmdInsert, "Mobile", value.Mobile); AddParam(cmdInsert, "Subject", value.Subject); AddParam(cmdInsert, "Content", value.Content); AddParam(cmdInsert, "QRCode", value.QRCode); AddParam(cmdInsert, "DB_APPNO", 1); AddParam(cmdInsert, "DB_CRDAT", DateTime.Now); AddParam(cmdInsert, "DB_CRUSR", CurrentUserId); AddParam(cmdInsert, "DB_TRDAT", DBNull.Value); AddParam(cmdInsert, "DB_TRUSR", DBNull.Value); int newId; ExecuteScalar(cmdInsert, out newId); value.ID = newId; AfterInsertOne(value); ts.Complete(); } catch (Exception error) { bool handled; OnInsertOneError(error, out handled); if(!handled) throw error; } return value; } } [DataObjectMethod(DataObjectMethodType.Update)] public MessageQueueItem UpdateOne(MessageQueueItem value) { using (TransactionScope ts = DAC.NewTransactionScope()) { try { if (!BeforeUpdateOne(value)) return value; MessageQueueList oldValues = SelectOne(value.ID); if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO) { throw new DBConcurrencyException("在更新 \"MessageQueue\" 資料表時發生並行例外:找不到要更新的資料列"); } else { DoBackup(oldValues[0], "UPDATE"); } DbCommand cmdUpdate = NewCommand(); cmdUpdate.CommandText = @"update [MessageQueue] set [CourseID] = @CourseID , [Status] = @Status , [Name] = @Name , [Mobile] = @Mobile , [Subject] = @Subject , [Content] = @Content , [QRCode] = @QRCode , DB_APPNO = DB_APPNO + 1, DB_TRDAT = @DB_TRDAT, DB_TRUSR = @DB_TRUSR where 1=1 and [ID] = @original_ID and DB_APPNO = @original_DB_APPNO "; AddParam(cmdUpdate, "CourseID", value.CourseID); AddParam(cmdUpdate, "Status", value.Status); AddParam(cmdUpdate, "Name", value.Name); AddParam(cmdUpdate, "Mobile", value.Mobile); AddParam(cmdUpdate, "Subject", value.Subject); AddParam(cmdUpdate, "Content", value.Content); AddParam(cmdUpdate, "QRCode", value.QRCode); AddParam(cmdUpdate, "DB_TRDAT", DateTime.Now); AddParam(cmdUpdate, "DB_TRUSR", CurrentUserId); AddParam(cmdUpdate, "original_ID", value.ID); AddParam(cmdUpdate, "original_DB_APPNO", value.DB_APPNO); ExecuteNonQuery(cmdUpdate); AfterUpdateOne(value); ts.Complete(); return value; } catch (Exception error) { bool handled; OnUpdateOneError(error, out handled); if(!handled) throw error; return value; } } } [DataObjectMethod(DataObjectMethodType.Update)] public MessageQueueItem UpdateOne(MessageQueueItem value, MessageQueueItem original_value) { using (TransactionScope ts = DAC.NewTransactionScope()) { try { if (!BeforeUpdateOne(value, original_value)) return value; MessageQueueList oldValues = SelectOne(original_value.ID); if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO) { throw new DBConcurrencyException("在更新 \"MessageQueue\" 資料表時發生並行例外:找不到要更新的資料列"); } else { DoBackup(oldValues[0], "UPDATE"); } DbCommand cmdUpdate = NewCommand(); cmdUpdate.CommandText = @"update [MessageQueue] set [CourseID] = @CourseID , [Status] = @Status , [Name] = @Name , [Mobile] = @Mobile , [Subject] = @Subject , [Content] = @Content , [QRCode] = @QRCode , DB_APPNO = DB_APPNO + 1, DB_TRDAT = @DB_TRDAT, DB_TRUSR = @DB_TRUSR where 1=1 and [ID] = @original_ID and DB_APPNO = @original_DB_APPNO "; AddParam(cmdUpdate, "CourseID", value.CourseID); AddParam(cmdUpdate, "Status", value.Status); AddParam(cmdUpdate, "Name", value.Name); AddParam(cmdUpdate, "Mobile", value.Mobile); AddParam(cmdUpdate, "Subject", value.Subject); AddParam(cmdUpdate, "Content", value.Content); AddParam(cmdUpdate, "QRCode", value.QRCode); AddParam(cmdUpdate, "DB_TRDAT", DateTime.Now); AddParam(cmdUpdate, "DB_TRUSR", CurrentUserId); AddParam(cmdUpdate, "original_ID", original_value.ID); AddParam(cmdUpdate, "original_DB_APPNO", original_value.DB_APPNO); ExecuteNonQuery(cmdUpdate); AfterUpdateOne(value, original_value); ts.Complete(); return value; } catch (Exception error) { bool handled; OnUpdateOneError(error, out handled); if(!handled) throw error; return value; } } } [DataObjectMethod(DataObjectMethodType.Delete)] public int DeleteOne(int ID, int DB_APPNO) { using (TransactionScope ts = DAC.NewTransactionScope()) { try { if (!BeforeDeleteOne(ID, DB_APPNO)) return -1; MessageQueueList oldValues = SelectOne(ID); if (oldValues.Count == 0 || oldValues[0].DB_APPNO != DB_APPNO) { throw new DBConcurrencyException("在刪除 \"MessageQueue\" 資料表時發生並行例外:找不到要刪除的資料列"); } else { DoBackup(oldValues[0], "DELETE"); } DbCommand cmdDelete = NewCommand(); cmdDelete.CommandText = @"delete from [MessageQueue] where 1=1 and ID = @ID and DB_APPNO = @DB_APPNO "; AddParam(cmdDelete, "ID", ID); AddParam(cmdDelete, "DB_APPNO", DB_APPNO); int rowsAffected = ExecuteNonQuery(cmdDelete); AfterDeleteOne(ID, DB_APPNO); ts.Complete(); return rowsAffected; } catch (Exception error) { bool handled; OnDeleteOneError(error, out handled); if(!handled) throw error; return -1; } } } [DataObjectMethod(DataObjectMethodType.Delete)] public int DeleteOne(MessageQueueItem value) { using (TransactionScope ts = DAC.NewTransactionScope()) { try { if (!BeforeDeleteOne(value)) return -1; MessageQueueList oldValues = SelectOne(value.ID); if (oldValues.Count == 0 || oldValues[0].DB_APPNO != value.DB_APPNO) { throw new DBConcurrencyException("在刪除 \"MessageQueue\" 資料表時發生並行例外:找不到要刪除的資料列"); } else { DoBackup(oldValues[0], "DELETE"); } DbCommand cmdDelete = NewCommand(); cmdDelete.CommandText = @"delete from [MessageQueue] where 1=1 and ID = @ID and DB_APPNO = @DB_APPNO "; AddParam(cmdDelete, "ID", value.ID); AddParam(cmdDelete, "DB_APPNO", value.DB_APPNO); int rowsAffected = ExecuteNonQuery(cmdDelete); AfterDeleteOne(value); ts.Complete(); return rowsAffected; } catch (Exception error) { bool handled; OnDeleteOneError(error, out handled); if(!handled) throw error; return -1; } } } public bool IsDuplicate(int ID) { DbCommand cmdSelect = NewCommand(); cmdSelect.CommandText = "select count(1)" + _from + _where + " and ID = @ID " ; AddParam(cmdSelect, "ID", ID); int count; ExecuteScalar(cmdSelect, out count); return count > 0; } public void DoBackup(MessageQueueItem value, string updateMode) { //DbCommand cmdBak = NewCommand(); //cmdBak.CommandText = // "insert into [MessageQueue_BAK]" // + " (" + _insertBak + ")" // + "values " // + " (" + _insertBakValue + ");" // ; //AddParam(cmdBak, "ID", value.ID); //AddParam(cmdBak, "CourseID", value.CourseID); //AddParam(cmdBak, "Status", value.Status); //AddParam(cmdBak, "Name", value.Name); //AddParam(cmdBak, "Mobile", value.Mobile); //AddParam(cmdBak, "Subject", value.Subject); //AddParam(cmdBak, "Content", value.Content); //AddParam(cmdBak, "QRCode", value.QRCode); //AddParam(cmdBak, "DB_APPNO", value.DB_APPNO); //AddParam(cmdBak, "DB_CRDAT", value.DB_CRDAT); //AddParam(cmdBak, "DB_CRUSR", value.DB_CRUSR); //AddParam(cmdBak, "DB_TRDAT", DateTime.Now); //AddParam(cmdBak, "DB_TRUSR", CurrentUserId); //AddParam(cmdBak, "DB_TRMOD", updateMode); //ExecuteNonQuery(cmdBak); } } /// ///MessageQueue 資料集合類別 /// [Serializable] public partial class MessageQueueList : List, IDataList { public void Fill(DbDataReader reader) { DAC.FillData(reader, this); } } /// /// MessageQueue 資料紀錄類別 /// [Serializable] public partial class MessageQueueItem : DataItemBase { private int _ID; private int _CourseID; private string _Status; private string _Name; private string _Mobile; private string _Subject; private string _Content; private string _QRCode; #region 資料欄位 /// /// 流水號 /// [DataObjectField(true, false, false)] public int ID { get { return _ID; } set { if (value != _ID) { _ID = value; OnPropertyChanged("ID"); } } } /// /// 課程ID /// [DataObjectField(false, false, false)] public int CourseID { get { return _CourseID; } set { if (value != _CourseID) { _CourseID = value; OnPropertyChanged("CourseID"); } } } /// /// 發送狀態 /// PENDING = 等候發送 /// SENDING = 發送中 /// SENT = 已發送 /// FAILED = 發送失敗 /// [DataObjectField(false, false, true, 10)] public string Status { get { return _Status; } set { if (value != _Status) { _Status = value; OnPropertyChanged("Status"); } } } /// /// 學員姓名 /// [DataObjectField(false, false, true, 100)] public string Name { get { return _Name; } set { if (value != _Name) { _Name = value; OnPropertyChanged("Name"); } } } /// /// 手機號 /// [DataObjectField(false, false, true, 20)] public string Mobile { get { return _Mobile; } set { if (value != _Mobile) { _Mobile = value; OnPropertyChanged("Mobile"); } } } /// /// 簡訊主旨 /// [DataObjectField(false, false, true, 100)] public string Subject { get { return _Subject; } set { if (value != _Subject) { _Subject = value; OnPropertyChanged("Subject"); } } } /// /// 簡訊內容 /// [DataObjectField(false, false, true, 500)] public string Content { get { return _Content; } set { if (value != _Content) { _Content = value; OnPropertyChanged("Content"); } } } /// /// QRCode 圖片的 BASE64 /// [DataObjectField(false, false, true)] public string QRCode { get { return _QRCode; } set { if (value != _QRCode) { _QRCode = value; OnPropertyChanged("QRCode"); } } } #endregion } }