public void SaveCalibrationResultWithoutTest() { _testDb.CreateDatabase(); _testDb.InitTestSchema(); _testDb.PopulateTestAccelData(); _testDb.PopulateTestAccelParams(); _testDb.PopulateTestCalibrationResult(); string databaseFile = _testDbFile; ILogger logger = new LoggerStub(); var target = new LocalDatabaseStorage(databaseFile, logger); target.Open(); var data = new CalibrationResult { Clusters = new List<AccelData> { new AccelData { Id = 1,Date = DateTime.Now,Ax = 10.0, Ay = 20.0}, new AccelData { Id = 2,Date = DateTime.Now,Ax = 20.0, Ay = 30.0} }, Parameters = new AccelParams { Id = 1,Date = DateTime.Now } }; target.SaveCalibrationResult(data); Assert.AreEqual(_testDb.GetIdCount("accel_params"), 3, "проверяем, что калибровочные параметры не добавлены"); Assert.AreEqual(_testDb.GetIdCount("accel_data"), 3, "проверяем, что данные акселерометров не добавлены"); Assert.AreEqual(_testDb.GetIdCount("calibr_result"), 2, "проверяем, что результаты калибровки записаны заново"); target.Close(); }
/// <summary> /// Сохраняет данные при калибровке датчика. /// </summary> /// <remarks>Связывает и сохраняет данные для последующей выборки GetCalibrationResultByParamsId</remarks> /// <param name="parameters">результат калбировки</param> /// <param name="clusters">данные используемые для калибровки</param> public void SaveCalibrationResult(CalibrationResult data) { // сохраняем/обновляем параметры SaveAccelParams(data.Parameters); // сохраняем/обновляем кластеры foreach (var accelData in data.Clusters) { SaveAccelData(accelData); } // удаляем старые связи между кластерами и калибровочными данными DeleteCalibrationResult(data.Parameters); // создаем записи во вспомогательной таблице CreateCalibrationResult(data); }
/// <summary> /// Создает записи в вспомогательной таблицы для связи калибровочных параметров и кластеров /// </summary> /// <param name="parameters"></param> /// <param name="clusters"></param> private void CreateCalibrationResult(CalibrationResult data) { var command = new SqlCeCommand(); command.Connection = _connection; command.CommandText = @"INSERT INTO calibr_result (accelDataId,accelParamsId) VALUES(@accelDataId,@accelParamsId)"; foreach (var accelData in data.Clusters) { command.Parameters.Clear(); command.Parameters.AddWithValue("@accelDataId", accelData.Id); command.Parameters.AddWithValue("@accelParamsId", data.Parameters.Id); command.ExecuteNonQuery(); } }
/// <summary> /// Делает выборку по результатам калибровки для указанного идентификатора калибровочных параметров /// </summary> public CalibrationResult GetCalibrationResultByParams(AccelParams parameters) { var result = new CalibrationResult {Parameters = parameters}; var command = new SqlCeCommand(); command.Connection = _connection; command.CommandText = @"SELECT data.Id, data.date, data.Ax, data.Ay FROM calibr_result result JOIN accel_data data ON (result.accelDataId = data.id) WHERE result.accelParamsId = @paramsId"; command.Parameters.AddWithValue("@paramsId", parameters.Id); var reader = command.ExecuteReader(); while (reader.Read()) { var data = new AccelData(); data.Id = reader.GetInt32(0); data.Date = reader.GetDateTime(1); data.Ax = reader.GetDouble(2); data.Ay = reader.GetDouble(3); result.Clusters.Add(data); } return result; }