예제 #1
0
        /// <summary>Получает часовой набор значений указанного параметра за указанный период</summary>
        /// <param name="start_time">Начало интервала</param>
        /// <param name="parameter_index">Индекс параметра</param>
        /// <param name="sql_queries">Название параметра (не используется в ODBC)</param>
        /// <param name="table">Ссылка на таблицу в памяти для приёма истории значений параметра</param>
        /// <returns>Запрос успешен: параметр существует и получены данные с хорошим качеством</returns>
        internal bool get_hour_interval(DateTime start_time, ushort index, Collection <string> sql_queries, ref MemoryTable table)
        {
            // счётчик принятых успешно данных
            uint count = 0;

            // обработка каждого, из ассоциированных с параметром, запросов
            foreach (var _query in sql_queries)
            {
                // выполняем вставку начала обрабатываемого часа в sql запрос
                string _sql_query = Regex.Replace(_query, "_unix_basetime_", (start_time - new DateTime(1970, 1, 1)).TotalSeconds.ToString());

                // проверка доступности источника данных
                if (_source_active)
                {
                    // выполнение запроса
                    using (OdbcDataReader _reader = new OdbcCommand(_sql_query, _odbc_connection).ExecuteReader())
                    {
                        // циклическое чтение данных
                        while (_reader.Read())
                        {
                            // подсчёт успешно принятых строк данных
                            count++;

                            // запись результатов в таблицу в памяти
                            table.write_value(index, new DateTime(1970, 1, 1).AddSeconds(_reader.GetDouble(0)), _reader.GetDouble(1), true);
                        }
                    }
                }
            }

            return(count > 0);
        }