示例#1
0
        public void Update()
        {
            // Получаем результирующий набор всех листов по доступам
            //TODO Ввести актуальный запрос
            var       command = new TextCommand(@"SELECT Description, Remark1, Remark2, Remark3 FROM elco.THEOPTION WHERE OPTIONLISTNUMBER = 'CMACROS'", Returns.Table);
            var       caller  = new DbCaller(command);
            DataTable table   = (DataTable)caller.DoWork();

            foreach (DataRow row in table.Rows)
            {
                // Создаем лист
                var sheet = new Sheet(row[0].ToString(), row[1].ToString(), row[2].ToString(), row[3].ToString());
                //Выгружаем экшены для этого листа
                //TODO Ввести актуальный запрос
                var       actionsCommand = new TextCommand(@"SELECT Description, Remark1, Remark2, Remark3 FROM elco.THEOPTION WHERE OPTIONLISTNUMBER = 'CMACROS'", Returns.Table);
                var       actionsCaller  = new DbCaller(actionsCommand);
                DataTable actionsTable   = (DataTable)actionsCaller.DoWork();
                foreach (DataRow actionRow in actionsTable.Rows)
                {
                    var action = new Action(actionRow[1].ToString(), int.Parse(actionRow[2].ToString()), actionRow[2].ToString(), actionRow[3].ToString());
                    //Выгружаем параметры для этого экшена
                    //TODO Ввести актуальный запрос
                    var       paramsCommand = new TextCommand(@"SELECT Description, Remark1, Remark2, Remark3 FROM elco.THEOPTION WHERE OPTIONLISTNUMBER = 'CMACROS'", Returns.Table);
                    var       paramsCaller  = new DbCaller(paramsCommand);
                    DataTable paramsTable   = (DataTable)paramsCaller.DoWork();
                    foreach (DataRow paramRow in paramsTable.Rows)
                    {
                        action.parameters.Add(new Param(paramRow[1].ToString(), paramRow[2].ToString(), int.Parse(paramRow[3].ToString()), paramRow[4].ToString(), paramRow[5].ToString()));
                    }
                    sheet.Actions.Add(action);
                }
                //Добавляем в общий список листов готовый лист с экшенами и параметрами
                _sheetList.Add(sheet);
            }
        }
示例#2
0
        public static DataTable GetDataTable(Action action, Param[] parameters = null)
        {
            // Заполняем команду названием процедуры из листа и параметрами
            var command = new FunctionCommand(action.FunctionName, parameters);
            // Передаем все в каллер и результат работы возвращаем
            var caller = new DbCaller(command);

            caller.DoWork();
            return((DataTable)caller.GetResult());
        }
示例#3
0
        public static DataTable GetDataTable(string sheet, Param[] parameters = null)
        {
            // Получаем лист
            Sheet currentSheet = Options.Sheets[sheet];
            // Заполняем команду названием процедуры из листа и параметрами
            var command = new FunctionCommand(currentSheet.Procedure, parameters);
            // Передаем все в каллер и результат работы возвращаем
            var caller = new DbCaller(command);

            caller.DoWork();
            return((DataTable)caller.GetResult());
        }
示例#4
0
        public static FileStreamResult GetXlsxFile(Action action, Param[] parameters = null)
        {
            // Заполняем команду названием процедуры из листа и параметрами
            var command = new FunctionCommand(action.FunctionName, parameters);
            // Создаем воркер, даем ему имя из листа
            var worker = new ExcelWorker(action.NameRus);
            // Передаем все в каллер и результат работы возвращаем
            var caller = new DbCaller(command, worker);

            caller.DoWork();
            return(DownloadXlsxFile((MemoryStream)caller.GetResult(), action.NameRus));
        }
示例#5
0
        /// <summary>
        /// Производит действия по извлечению данных из БД и размещению их в Excel. Далее автоматически отдает на загрузку, если помещен после return
        /// </summary>
        /// <param name="sheet">Название листа</param>
        /// <param name="parameters">Параметр(ы)</param>
        public static FileStreamResult GetXlsxFile(string sheet, Param[] parameters = null)
        {
            // Получаем лист
            Sheet currentSheet = Options.Sheets[sheet];
            // Заполняем команду названием процедуры из листа и параметрами
            var command = new FunctionCommand(currentSheet.Procedure, parameters);
            // Создаем воркер, даем ему имя из листа
            var worker = new ExcelWorker(currentSheet.Description);
            // Передаем все в каллер и результат работы возвращаем
            var caller = new DbCaller(command, worker);

            caller.DoWork();
            return(DownloadXlsxFile((MemoryStream)caller.GetResult(), currentSheet.Description));
        }
示例#6
0
        // Универсальный класс для заполнения списков опций.
        //<T> - Обобщение, where T : OptionList, new() - так T гарантирует, что будет иметь конструктор без параметров и будет наследоваться от OptionList.
        // Благодаря этому мы сможем создать новые экземпляры напрямую из этого метода.
        static void UpdateOptions <T> (string SqlString, ref List <T> list) where T : IOptionList, new()
        {
            //Очищаем массив
            if (list is null)
            {
                list = new List <T>();
            }
            else
            {
                list.Clear();
            }
            // Вносим в команду запрос для заполнения массива, возвращать будем таблицу
            var command = new TextCommand(SqlString, Returns.Table);
            var caller  = new DbCaller(command, null, "Oracle");

            caller.DoWork();
            // Возвращаем результат каллера в виде датасета
            var dt = (DataTable)caller.GetResult();

            // Проходим по строчкам и вносим данные в массив
            foreach (DataRow row in dt.Rows)
            {
                // Создаем массив с размерностью строки
                object[] dsRow = new object[dt.Columns.Count];
                // Заполняем его согласно данным со столбцов
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    dsRow[i] = row.ItemArray[i];
                }
                // Создаем экземпляр обобщенного класса
                var newElem = new T();
                // Вносим в него данные, передав ему свежесозданный массив объектов
                newElem.CreateFromArray(dsRow);
                // Вносим экзепляр в целевой массив
                list.Add(newElem);
            }
        }