/// <summary> /// Удаляет объект данного типа по идентификатору. /// </summary> /// <param name="type"></param> /// <param name="id"></param> public static void DeleteObjectByID(Type type, int id) { // для записи в лог необходимо получить название объекта LogObjectAttribute logAttr = Logger.GetLogObjectAttribute(type); string value = null; if (logAttr != null) { // если объект предназначен для протоколирования // для этого перед удалением подгружаем объект BasePlainObject obj = (BasePlainObject)Activator.CreateInstance(type); obj.Load(id); // получаем значение объекта value = Logger.GetLogObjectValue(obj, logAttr.PropertyName); } // производим непосредственно удаление IBaseCommand deleteCommand = new Query(ObjectMapper.GetDeleteStatement(type)); deleteCommand.Add("@ID", id); deleteCommand.ExecNonQuery(); if (logAttr != null) { // пишем в лог Logger.InfoDeleteObject(type, value); } }
public override bool LoadByReference(params object[] param) { bool result = false; Type thisType = this.GetType(); var queryStatement = ObjectMapper.GetSelectQueryStatement(thisType); Dictionary<string, object> prms; queryStatement.ConcatClauses(GetObjectByFieldCondition(this.GetType(), out prms, param)); BaseCommand command = new Query(queryStatement.ToString()); foreach (string key in prms.Keys) { command.Add(key, prms[key]); } DataRow row = command.ExecDataRow(); if (row != null) { ReadFromRow(row); result = true; } return result; }
/// <summary> /// Возвращает датасет актуальных новостей. /// </summary> public static DataSet GetActualNews(string[] offices) { var queryStatement = ObjectMapper.GetSelectQueryStatement(typeof(News)); queryStatement.Clauses.Add(new QueryStatementClause(string.Empty, ">") { FieldName = "ExpireTime", Value = "@expTime" }); var query = new Query(queryStatement.ToString()); query.Add("@expTime", DateTime.Now, DbType.Time); query.Command.CommandText += " AND (OfficeID=" + String.Join(" OR OfficeID=", offices) + ")"; query.Command.CommandText += " ORDER BY CreateTime DESC"; return query.ExecDataSet(); }
/// <summary> /// Проверяет возможность добавления мероприятия с данным интервалом. /// </summary> /// <param name="ConferenceHallID">ID комнаты.</param> /// <param name="ArrangementID">ID мероприятия (при редактировании).</param> /// <param name="dBegin">Дата начала.</param> /// <param name="dEnd">Дата конца.</param> /// <returns>Возможно ли добавление.</returns> public static bool CheckArrangementAdding(int ConferenceHallID, int ArrangementID, DateTime dBegin, DateTime dEnd) { String sql = "SELECT a.* FROM "; sql += DBAttributesManager.GetDBTableName(typeof(ConfirmIt.PortalLib.Arrangements.Arrangement)) + " a, "; sql += DBAttributesManager.GetDBTableName(typeof(ArrangementDate)) + " b"; //compare time only from Arrangement table sql += " WHERE (CONVERT(char(12), a.TimeBegin, 114) <= CONVERT(char(12), @pDateBegin, 114)" + "and CONVERT(char(12), a.TimeEnd, 114) > CONVERT(char(12), @pDateEnd, 114)"; sql += " AND (b.ArrangementID=a.ID)"; //compare date only from ArrangementDate table sql += " AND CONVERT(char(8), b.Date, 112)=CONVERT(char(8), @pDateBegin, 112))"; //compare time only from Arrangement table sql += " OR (CONVERT(char(12), a.TimeBegin, 114) >= CONVERT(char(12), @pDateBegin, 114)" + "and CONVERT(char(12), a.TimeEnd, 114) <= CONVERT(char(12), @pDateEnd, 114)"; sql += " AND (b.ArrangementID=a.ID)"; //compare date only from ArrangementDate table sql += " AND CONVERT(char(8), b.Date, 112)=CONVERT(char(8), @pDateBegin, 112))"; //compare time only from Arrangement table sql += " OR (CONVERT(char(12), a.TimeBegin, 114) < CONVERT(char(12), @pDateEnd, 114)" + "and CONVERT(char(12), a.TimeEnd, 114) >= CONVERT(char(12), @pDateEnd, 114)"; sql += " AND (b.ArrangementID=a.ID)"; //compare date only from ArrangementDate table sql += " AND CONVERT(char(8), b.Date, 112)=CONVERT(char(8), @pDateBegin, 112))"; sql += " AND (a.ID != " + ArrangementID + ")"; //sql += " WHERE ((a.TimeBegin <= @pDateBegin and a.TimeEnd > @pDateBegin)"; //sql += " or (a.TimeBegin >= @pDateBegin and a.TimeEnd <= @pDateEnd)"; //sql += " or (a.TimeBegin < @pDateEnd and a.TimeEnd >= @pDateEnd))"; Query q = new Query(sql); q.Add("@pDateBegin", dBegin, DbType.Time); q.Add("@pDateEnd", dEnd, DbType.Time); q.Command.CommandText += " AND (a.ConferenceHallID=" + ConferenceHallID + ")"; if (ArrangementID != 0) q.Command.CommandText += " AND (a.ID<>" + ArrangementID + ")"; DataTable dt = q.ExecDataTable(); if (dt.Rows.Count == 0) return true; else return false; }
/// <summary> /// Is this arrangement cyclic /// </summary> public static bool isCyclicArrangement(int ArrID) { String sql = "SELECT * FROM "; sql += DBAttributesManager.GetDBTableName(typeof(ArrangementDate)); sql += " WHERE ArrangementID=" + ArrID; Query q = new Query(sql); DataTable dt = q.ExecDataTable(); if (dt.Rows.Count > 1) return true; else return false; }
/// <summary> /// Создает команду к БД, которая изменяет запись об объекте в БД. /// </summary> /// <returns></returns> private BaseCommandCollection GetUpdateCommands() { BaseCommandCollection updateCommands = new BaseCommandCollection(); Dictionary<string, List<FieldData>> dictMappingData = new Dictionary<string, List<FieldData>>(); Dictionary<string, string> updateCommandsText = ObjectMapper.GetUpdateStatements(this, out dictMappingData); foreach (var updateCommandText in updateCommandsText) { IBaseCommand command = new Query(updateCommandText.Value); command.Add("@ID", ID); addParametersToCommand(command, dictMappingData[updateCommandText.Key]); updateCommands.Add(command.Command); } return updateCommands; }
/// <summary> /// Возвращает датасет, содержащий все записи БД, соответствующие объектам заданного типа. /// </summary> /// <param name="type"></param> /// <returns></returns> private static DataSet GetObjectsDataset(Type type, params object[] param) { Dictionary<string, object> prms; var queryStatement = ObjectMapper.GetSelectQueryStatement(type); queryStatement.ConcatClauses(GetObjectByFieldCondition(type, out prms, param)); BaseCommand command = new Query(queryStatement.ToString()); foreach (string key in prms.Keys) { command.Add(key, prms[key]); } return command.ExecDataSet(); }
/// <summary> /// Загружает объект по заданному набору имен полей и значениям /// </summary> /// <param name="field_name"></param> /// <param name="value"></param> /// <returns>Строку данных, если объект найден и null, если нет</returns> protected DataRow GetObjectByField(params object[] param) { Type thisType = this.GetType(); var queryStatement = ObjectMapper.GetSelectQueryStatement(thisType); Dictionary<string, object> prms; queryStatement.ConcatClauses(GetObjectByFieldCondition(this.GetType(), out prms, param)); BaseCommand command = new Query(queryStatement.ToString()); foreach (string key in prms.Keys) { command.Add(key, prms[key]); } return command.ExecDataRow(); }
/// <summary> /// Возвращает команду для загрузки объекта из БД по идентификатору. /// </summary> /// <param name="id">Идентификатор объекта, который следует загрузить.</param> /// <returns></returns> protected virtual IBaseCommand GetLoadByIDCommand(int id) { IBaseCommand command = new Query(ObjectMapper.GetSelectByIDQueryStatement(this.GetType()).ToString()); command.Add("@ID", id); return command; }
/// <summary> /// Возвращает команду БД для получения постраничного списка объектов. /// </summary> /// <param name="type">Тип объектов.</param> /// <param name="args">Параметры страницы.</param> /// <returns></returns> public static BaseCommand GetObjectsPageCommand(Type type, PagingArgs args, params object[] param) { Dictionary<string, object> prms; var statement = ObjectMapper.GetSelectQueryStatement(type); statement.ConcatClauses(GetObjectByFieldCondition(type, out prms, param)); BaseCommand command = new Query(statement.ToString()); foreach (string key in prms.Keys) { command.Add(key, prms[key]); } var procedure = new Procedure("uiGetObjectsPage"); procedure.Add("@PageIndex", args.PageIndex); procedure.Add("@PageSize", args.PageSize); procedure.Add("@OrderField", args.SortExpression); procedure.Add("@IsOrderASC", args.SortOrderASC); procedure.Add("@Query", ObjectMapper.GetCommandFullText(command)); procedure.AddReturnValueParameter(); return procedure; }
/// <summary> /// Возвращает таблицу "разрешенных" тегов. /// </summary> /// <returns></returns> public static DataTable GetAllowTags() { String query = "SELECT tagName from AllowTags"; Query q = new Query(query); DataTable dt = q.ExecDataTable(); return dt; }