コード例 #1
0
ファイル: BasePlainObject.cs プロジェクト: Confirmit/Portal
        /// <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);
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
ファイル: DBManager.cs プロジェクト: Confirmit/Portal
        /// <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();
        }
コード例 #4
0
        /// <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;
        }
コード例 #5
0
        /// <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;
        }
コード例 #6
0
ファイル: BasePlainObject.cs プロジェクト: Confirmit/Portal
        /// <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;
        }
コード例 #7
0
ファイル: BasePlainObject.cs プロジェクト: Confirmit/Portal
        /// <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();
        }
コード例 #8
0
ファイル: BasePlainObject.cs プロジェクト: Confirmit/Portal
        /// <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();
        }
コード例 #9
0
ファイル: BasePlainObject.cs プロジェクト: Confirmit/Portal
        /// <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;
        }
コード例 #10
0
ファイル: BasePlainObject.cs プロジェクト: Confirmit/Portal
        /// <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;
        }
コード例 #11
0
ファイル: DBManager.cs プロジェクト: Confirmit/Portal
 /// <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;
 }