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); } }
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()); }
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()); }
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)); }
/// <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)); }
// Универсальный класс для заполнения списков опций. //<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); } }