static public bool UpdateFromBD(InteractionWithBase oConn, string listName, SensitiveElement SelectElement) { try { Dictionary <string, object> UpdateID = new Dictionary <string, object> { { "ID", SelectElement.Filds["ID"] } }; SensitiveElement UpdateElement = new SensitiveElement(UpdateID); if (SelectFromBD(oConn, listName, UpdateElement).Count == 0) { throw new ErrorDeleteException("Ошибка! Такой элемент не содержится в БД."); } if (SelectFromBD(oConn, listName, UpdateElement).Count > 1) { throw new Exception("В БД содержатся несколько элементов с одним ID"); } // Формирование запроса на обновление string request = "update [БД$]"; string set = " set"; foreach (string s in SelectElement.GetListHead()) { set += String.Format(" {0} = \"{1}\",", s, SelectElement.Filds[s]); } // Удалить последнюю запятую set = set.Remove(set.Length - 1); request += set; /* * request += String.Format(" set Номер_блока = \"{1}\", Номер_СИОМ = \"{2}\", Uвыx_лев ={3}, Uвых_прав = {4}, СПИлев = {5}, СПИправ = {6}, LСИОМлев = {7}, LСИОМправ = {8}, Uвк = {9}, СПИвк = {10}, Uпост = {11}, LВКлев = {12}, LВКправ = {13}, ТД = \"{14}\", IsExperemental = \"{15}\"", * SelectElement.Id, SelectElement.NumberVK, SelectElement.NumberSIOM, SelectElement.SignalLeftSIOM, SelectElement.SignalRigthSIOM, * SelectElement.SPILeftSIOM, SelectElement.SPIRigthSIOM, SelectElement.LengthLeftSIOM, SelectElement.LengthRigthSIOM, * SelectElement.SignalVK, SelectElement.SPIVK, SelectElement.ConstantSignal, SelectElement.LengthLeftVK, SelectElement.LengthRigthVK, * SelectElement.NumberTemperatureSensor, SelectElement.IsExperement); */ request += String.Format(" where ID = \"{0}\"", SelectElement.Filds["ID"]); oConn.OpenBD(); GetAdapter(oConn, request).Fill(new DataTable()); oConn.CloseBD(); return(true); } catch (ErrorDeleteException ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK); return(false); } catch { MessageBox.Show("Возникла ошибка на операции обновления строки. Обратитесь к рукожопу, который делал эту программу", "Рукожёп детектед", MessageBoxButtons.OK); throw; } }
// Метод, который формирует адаптер. Не вижу смысла его детлать, но рекомендуют весь повторяющийся код делать // в отдельный метод, поэтому сделал static private OleDbDataAdapter GetAdapter(InteractionWithBase oConn, string request) { try { OleDbDataAdapter oAdapt = new OleDbDataAdapter(); OleDbCommand oCmd = new OleDbCommand(); oCmd.Connection = oConn.oConn; oCmd.CommandText = request; oAdapt.SelectCommand = oCmd; return(oAdapt); } catch { MessageBox.Show("Возникла ошибка на операции создания адаптера. Обратитесь к рукожопу, который делал эту программу", "Рукожёп детектед", MessageBoxButtons.OK); throw; } }
// Этом метод ищет в БД блоки со всеми полями, которые не равны 0 в передоваемом блоке static public List <SensitiveElement> SelectFromBD(InteractionWithBase oConn, string listName, SensitiveElement SelectElement) { try { DataTable tDT = new DataTable(); string request = String.Format("select * from[{0}$]", listName); // Сам запрос request += FormFildRequest(SelectElement); oConn.OpenBD(); GetAdapter(oConn, request).Fill(tDT); oConn.CloseBD(); return(ParseTable(tDT)); } catch { MessageBox.Show("Возникла ошибка на операции выборки из БД. Обратитесь к рукожопу, который делал эту программу", "Рукожёп детектед", MessageBoxButtons.OK); throw; } }
// Метод вставки в БД static public bool InsertFromBD(InteractionWithBase oConn, string listName, SensitiveElement SelectElement) { try { // Проверка на дубляж SensitiveElement findElement = new SensitiveElement(new Dictionary <string, object> { { "ID", SelectElement.Filds["ID"] } }); if (SelectFromBD(oConn, listName, findElement).Count != 0) { throw new ErrorInsertExceptions("Ошибка! Такой элемент уже содержится в БД."); } if (SelectElement.Filds["ID"] == null) { throw new ErrorInsertExceptions("Ошибка! Элемент должен содержать ID."); } // Составление части запроса на вставку со столбцами string heads = "("; string values = " values ("; foreach (string s in SelectElement.GetListHead()) { heads += String.Format(" {0},", s); values += String.Format(" \"{0}\",", SelectElement.Filds[s]); } // Удалить последние запятые и добавить закрывающеюся скобку heads = heads.Remove(heads.Length - 1); heads += ")"; values = values.Remove(values.Length - 1); values += ")"; string request = String.Format("insert into [БД$] {0} {1}", heads, values); oConn.OpenBD(); GetAdapter(oConn, request).Fill(new DataTable()); oConn.CloseBD(); return(true); } catch (ErrorInsertExceptions ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK); return(false); } catch { MessageBox.Show("Возникла ошибка на операции вставки строки. Обратитесь к рукожопу, который делал эту программу", "Рукожёп детектед", MessageBoxButtons.OK); throw; } }
// Метод заполнения диаграмм точками. private void CreateDateChart(string directionFile) { try { // Запрос в файл с данными для получения точек, по каторым строится диаграмма InteractionWithBase oCon = new InteractionWithBase(directionFile); oCon.SettingConnectToBD(); List <SensitiveElement> PointsOfChart = QueriesToBD.SelectFromBD(oCon, "Паспорт СИОМ", new SensitiveElement()); // Настройка диаграмм Series SChartSPI_SPI1 = new Series("СПИ 1"); SChartSPI_SPI1.ChartType = SeriesChartType.Line; Series SChartSPI_SPI2 = new Series("СПИ 2"); SChartSPI_SPI2.ChartType = SeriesChartType.Line; Series SChartTemperature = new Series("Температура"); SChartTemperature.ChartType = SeriesChartType.Line; Series SChartLoss = new Series("Потери"); SChartLoss.ChartType = SeriesChartType.Line; Series SChartKD = new Series("Коофицент деления"); SChartKD.ChartType = SeriesChartType.Line; Series SChartPower1 = new Series("Мощьность 1"); SChartPower1.ChartType = SeriesChartType.Line; Series SChartPower2 = new Series("Мощьность 2"); SChartPower2.ChartType = SeriesChartType.Line; foreach (SensitiveElement s in PointsOfChart) { // Составление точек диаграммы СПИ // Основные параметры для составления точек double time = (double)s.Filds["Time (s)"]; double spi1 = (double)s.Filds["ER1(dB)"]; double spi2 = (double)s.Filds["ER2(dB)"]; double power1 = (double)s.Filds["POW1(mW)"]; double power2 = (double)s.Filds["POW2(mW)"]; double temperature = (double)s.Filds["Темп#, °С"]; double kd = (double)s.Filds["КД по лев# кан#, %"]; double loss = (double)s.Filds["Потери, дБ"]; // Поиск минималных и максимальных точкд для отображения диаграмм if (dMaxSPI < spi1) { dMaxSPI = spi1; } if (dMaxSPI < spi2) { dMaxSPI = spi1; } if (dMinSPI > spi1) { dMinSPI = spi1; } if (dMinSPI > spi2) { dMinSPI = spi2; } if (dMaxPower < power1) { dMaxPower = power1; } if (dMaxPower < power2) { dMaxPower = power2; } if (dMinPower > power1) { dMinPower = power1; } if (dMinPower > power2) { dMinPower = power2; } if (dMaxKD < kd) { dMaxKD = kd; } if (dMinKD > kd) { dMinKD = kd; } if (dMaxLoss < loss) { dMaxLoss = loss; } if (dMinLoss > loss) { dMinLoss = loss; } // Диаграмма СПИ DataPoint DPspi1 = new DataPoint(time, spi1); DataPoint DPspi2 = new DataPoint(time, spi2); DataPoint DPtemperature = new DataPoint(time, temperature); // Диаграмма Потери\КД DataPoint DPloss = new DataPoint(time, loss); DataPoint DPkd = new DataPoint(time, kd); // Диаграмма Мощности DataPoint DPpower1 = new DataPoint(time, power1); DataPoint DPpower2 = new DataPoint(time, power2); // Добавление точек к шкале диаграммы SChartSPI_SPI1.Points.Add(DPspi1); SChartSPI_SPI2.Points.Add(DPspi2); SChartTemperature.Points.Add(DPtemperature); SChartPower1.Points.Add(DPpower1); SChartPower2.Points.Add(DPpower2); SChartKD.Points.Add(DPkd); SChartLoss.Points.Add(DPloss); } // Добавление графиков к диаграммам ChartSPI.Series.Add(SChartSPI_SPI1); ChartSPI.Series.Add(SChartSPI_SPI2); ChartSPI.Series.Add(SChartTemperature); ChartLoss.Series.Add(SChartLoss); ChartLoss.Series.Add(SChartKD); ChartPower.Series.Add(SChartPower1); ChartPower.Series.Add(SChartPower2); } catch { MessageBox.Show("Возникла ошибка на операции составления графиков СИОМ. Обратитесь к рукожопу, который делал эту программу", "Рукожёп детектед", MessageBoxButtons.OK); throw; } }
// Метод нахождения данных диаграммы private void CreateDateChart(string directionFile) { try { // Запрос в файл с данными для получения точек, по каторым строится диаграмма InteractionWithBase oCon = new InteractionWithBase(directionFile); oCon.SettingConnectToBD(); string spiVK = String.Format("ER{0}(dB)", NumberVKinChart); string powerVK = String.Format("POW{0}(mW)", NumberVKinChart); Dictionary <string, object> fildsOfVK = new Dictionary <string, object>(); fildsOfVK.Add("Time (s)", null); fildsOfVK.Add(spiVK, null); fildsOfVK.Add(powerVK, null); List <SensitiveElement> PointsOfChart = QueriesToBD.SelectFromBD(oCon, "Лист1", new SensitiveElement()); // Настройка диаграмм Series SChartSPI_SPI = new Series("СПИ"); SChartSPI_SPI.ChartType = SeriesChartType.Line; Series SChartPower = new Series("Мощьность"); SChartPower.ChartType = SeriesChartType.Line; foreach (SensitiveElement s in PointsOfChart) { // Составление точек диаграммы СПИ // Основные параметры для составления точек double time = (double)s.Filds["Time (s)"]; double spi = (double)s.Filds[spiVK]; double power = (double)s.Filds[powerVK]; // Поиск минималных и максимальных точкд для отображения диаграмм if (dMaxSPI < spi) { dMaxSPI = spi; } if (dMinSPI > spi) { dMinSPI = spi; } if (dMaxPower < power) { dMaxPower = power; } if (dMinPower > power) { dMinPower = power; } // Диаграмма СПИ DataPoint DPspi = new DataPoint(time, spi); // Диаграмма Мощности DataPoint DPpower = new DataPoint(time, power); // Добавление точек к шкале диаграммы SChartSPI_SPI.Points.Add(DPspi); SChartPower.Points.Add(DPpower); } // Добавление графиков к диаграммам ChartVK.Series.Add(SChartSPI_SPI); ChartVK.Series.Add(SChartPower); } catch { MessageBox.Show("Возникла ошибка на операции составления графиков ВК. Обратитесь к рукожопу, который делал эту программу", "Рукожёп детектед", MessageBoxButtons.OK); throw; } }