/// <summary> /// Возвратитиь запрос для выборки данных ТГ /// </summary> /// <param name="tec">Станция, для которой необходимо получить значения</param> /// <param name="indx">Индекс текущей группы сигналов</param> /// <param name="dtStart">Дата - начало</param> /// <param name="dtEnd">Дата - окончание</param> /// <returns>Строка запроса</returns> private string getQuery(TEC_LOCAL tec,TEC_LOCAL.INDEX_DATA indx,DateTime dtStart,DateTime dtEnd) { string strRes = @"SELECT res.[OBJECT], res.[ITEM], SUM(res.[VALUE0]) / COUNT(*)[VALUE0], res.[DATETIME], COUNT(*) as [COUNT] FROM( SELECT[OBJECT], [ITEM], [VALUE0], DATEADD(MINUTE, ceiling(DATEDIFF(MINUTE, DATEADD(DAY, DATEDIFF(DAY, 0, '?DATADATESTART?'), 0), [DATA_DATE]) / 60.) * 60, DATEADD(DAY, DATEDIFF(DAY, 0, '?DATADATESTART?'), 0)) as [DATETIME] FROM[DATA] WHERE[PARNUMBER] = 12 AND[OBJTYPE] = 0 AND([DATA_DATE] > '?DATADATESTART?' AND NOT[DATA_DATE] > '?DATADATEEND?') AND(?SENSORS?) GROUP BY[RCVSTAMP], [OBJECT], [OBJTYPE], [ITEM], [VALUE0], [SEASON], DATEADD(MINUTE, ceiling(DATEDIFF(MINUTE, DATEADD(DAY, DATEDIFF(DAY, 0, '?DATADATESTART?'), 0), [DATA_DATE]) / 60.) * 60, DATEADD(DAY, DATEDIFF(DAY, 0, '?DATADATESTART?'), 0))) res GROUP BY[OBJECT], [ITEM], [DATETIME] ORDER BY[OBJECT], [ITEM], [DATETIME]"; if (tec.m_Sensors[(int)indx].Equals(string.Empty) == false) { strRes = strRes.Replace(@"?SENSORS?",tec.m_Sensors[(int)indx]); strRes = strRes.Replace(@"?DATADATESTART?",dtStart.ToString(@"yyyyMMdd")); strRes = strRes.Replace(@"?DATADATEEND?",dtEnd.ToString(@"yyyyMMdd")); } else { strRes = string.Empty; } return(strRes); }
/// <summary> /// Получить все (ТГ, ТСН) значения для станции /// </summary> /// <param name="tec">Станция, для которой необходимо получить значения</param> /// <param name="iListenerId">Идентификатор установленного соединения с источником данных</param> /// <param name="dtStart">Дата - начало</param> /// <param name="dtEnd">Дата - окончание</param> /// <returns>Результат выполнения - признак ошибки (0 - успех)</returns> public int Request(TEC_LOCAL tec,int iListenerId,DateTime dtStart,DateTime dtEnd) { int iRes = 0; tec.m_listValuesDate.Clear(); if (m_markIndxRequestError == null) { m_markIndxRequestError = new HMark(0); } else { m_markIndxRequestError.SetOf(0); } DbConnection dbConn = DbSources.Sources().GetConnection(iListenerId,out iRes); if (iRes == 0) { foreach (TEC_LOCAL.INDEX_DATA indx in Enum.GetValues(typeof(TEC_LOCAL.INDEX_DATA))) { // запросить и обработать результат запроса по получению значений для группы сигналов в указанный диапазон дат iRes = Request(tec,ref dbConn,dtStart,dtEnd,indx); m_markIndxRequestError.Set((int)indx,iRes < 0); } } else { Logging.Logg().ExceptionDB("FormMain.Tec.Request () - не установлено соединение с DB..."); iRes = -1; } iRes = m_markIndxRequestError.Value == 0 ? 0 : -1; return(iRes); }
/// <summary> /// Получить все (ТГ, ТСН) значения для станции /// </summary> /// <param name="tec">Станция, для которой необходимо получить значения</param> /// <param name="iListenerId">Идентификатор установленного соединения с источником данных</param> /// <param name="dtStart">Дата - начало</param> /// <param name="dtEnd">Дата - окончание</param> /// <param name="indx">Индекс группы сигналов</param> /// <returns>Результат выполнения - признак ошибки (0 - успех)</returns> public int Request(TEC_LOCAL tec,int iListenerId,DateTime dtStart,DateTime dtEnd,TEC_LOCAL.INDEX_DATA indx) { int iRes = 0; string query = string.Empty; DbConnection dbConn = DbSources.Sources().GetConnection(iListenerId,out iRes); iRes = Request(tec,ref dbConn,dtStart,dtEnd,indx); return(iRes); }
/// <summary> /// Получить все (ТГ, ТСН) значения для станции /// </summary> /// <param name="tec">Станция, для которой необходимо получить значения</param> /// <param name="dbConn">Ссылка на объект соединения с БД-источником данных</param> /// <param name="dtStart">Дата - начало</param> /// <param name="dtEnd">Дата - окончание</param> /// <param name="indx">Индекс группы сигналов</param> /// <returns>Результат выполнения - признак ошибки (0 - успех)</returns> public int Request(TEC_LOCAL tec, ref DbConnection dbConn, DateTime dtStart, DateTime dtEnd, TEC_LOCAL.INDEX_DATA indx) { int iRes = 0 , err = -1; string query = string.Empty; //DateTime dtQuery; //TimeSpan tsQuery; ActionReport("Получение значения для " + indx.ToString() + " " + tec.m_strNameShr); //dtQuery = DateTime.Now; tec.m_arTableResult[(int)indx] = null; query = getQuery(tec, indx, dtStart, dtEnd); if (query.Equals(string.Empty) == false) { tec.m_arTableResult[(int)indx] = new TEC_LOCAL.TableResult(DbTSQLInterface.Select(ref dbConn, query, null, null, out err)); //tsQuery = DateTime.Now - dtQuery; //Logging.Logg().Action(string.Format(@"TEC.ID={0}, ИНДЕКС={1}, время={4}{2}запрос={3} сек" // , tec.m_Id, indx.ToString(), Environment.NewLine, query, tsQuery.TotalSeconds) // , Logging.INDEX_MESSAGE.NOT_SET); if (err == 0) { tec.parseTableResult(dtStart, dtEnd, indx, out err); ActionReport("Получены значения для " + indx.ToString() + " " + tec.m_strNameShr); } else { Logging.Logg().Error(string.Format("TEC.ID={0}, ИНДЕКС={1} не получены данные за {2}{3}Запрос={4}" , tec.m_Id, indx.ToString(), dtEnd, Environment.NewLine, query) , Logging.INDEX_MESSAGE.NOT_SET); iRes = -1; } } else { Logging.Logg().Error(string.Format("TEC.ID={0}, группа ИНДЕКС={1} пропущена, не сформирован запрос за {2}" , tec.m_Id, indx.ToString(), dtStart, Environment.NewLine, query) , Logging.INDEX_MESSAGE.NOT_SET); iRes = 1; // Предупреждение } ReportClear(true); return(iRes); }