/// <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="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); }
/// <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); }