public (Result, string) Insert(IEnumerable <TemperatureFrame> data, object state = null)
        {
            using (var adapter = new TemperatureTableAdapter
            {
                Connection = new SqlConnection(SettingsContext.GlobalSettings.NifudaConnectionString)
            })
            {
                if (!SafeCheck.IsValidConnection(adapter.Connection))
                {
                    return(Result.Unsuccess, $"Database connection error");
                }

                var methodInfo = typeof(TemperatureTableAdapter).GetMethod("Insert");

                foreach (var obj in data)
                {
                    var tupleParameters = obj.PropertiesToTuple();
                    var values          = methodInfo.GetParameters().Select(info =>
                                                                            tupleParameters.FirstOrDefault(p =>
                                                                                                           p.Name.ToLower()
                                                                                                           == info.Name.ToLower()).Value ?? "");
                    if (values == null)
                    {
                        continue;
                    }
                    methodInfo.Invoke(adapter, values.ToArray());
                }

                return(Result.Success, $"Ok");
            }
        }
Exemplo n.º 2
0
        private void CreateMeasurementTasks()
        {
            this.tokenSource = new CancellationTokenSource();
            CancellationToken token = this.tokenSource.Token;
            this.temperatureMeasurementTask = new Task(
                delegate(object o)
                {
                    bool b = o is CancellationToken;
                    using (TemperatureTableAdapter adapter = new TemperatureTableAdapter())
                    {
                        int counter = 0;
                        Random temperatureValue = new Random();
                        while (true)
                        {
                            if (token.IsCancellationRequested)
                                throw new OperationCanceledException();

                            int affectedRows = adapter.Insert(
                                (float?)(temperatureValue.NextDouble() * 100.0),
                                (short?)(temperatureValue.Next(0, 1023)), DateTime.Now);
                            if (affectedRows <= 0)
                                throw new Exception("The sensor data could not be inserted into the database!");

                            this.Invoke(
                                (Action<int>) delegate(int cntr)
                                                {
                                                    this.dataRecordsNumValueTolStripStatusLabel.Text =
                                                        cntr.ToString(CultureInfo.InvariantCulture);
                                                }, ++counter);
                        }
                    }
                }, token);
        }
        // Результат обязательно проверить на NULL! Выбирает дипазон 10 минут от  заданной даты и ищет максимально близкое значение.
        //  Если в диапазоне не оказалось значений, возвращает NULL
        public TemperatureFrame SelectLastByDate(DateTime time)
        {
            using (var adapter = new TemperatureTableAdapter
            {
                Connection = new SqlConnection(SettingsContext.GlobalSettings.NifudaConnectionString)
            })
            {
                if (!SafeCheck.IsValidConnection(adapter.Connection))
                {
                    throw new ConnectionException(SettingsContext.GlobalSettings.NifudaConnectionString);
                }

                var dataTable = adapter.GetDataBetweenDate(time - new TimeSpan(0, 5, 0), time + new TimeSpan(0, 5, 0));
                return(dataTable.AdaptWithSameProperties <TemperatureFrame, TemperatureDataTableRow>()
                       .OrderBy(t => Math.Abs((t.Time - time).Ticks))
                       .FirstOrDefault());
            }
        }
        public IEnumerable <TemperatureFrame> Select(object state = null)
        {
            using (var adapter = new TemperatureTableAdapter
            {
                Connection = new SqlConnection(SettingsContext.GlobalSettings.NifudaConnectionString)
            })
            {
                if (!SafeCheck.IsValidConnection(adapter.Connection))
                {
                    throw new ConnectionException(SettingsContext.GlobalSettings.NifudaConnectionString);
                }

                var dataTable = adapter.GetData();
                foreach (var obj in dataTable.AdaptWithSameProperties <TemperatureFrame,
                                                                       TemperatureDataTableRow>())
                {
                    yield return(obj);
                }
            }
        }