public override DbImportResult Import(bool canCreateProperties = false) { DbImportResult = new DbImportResult(); if (MetaData.ImportType != CommonUtils.ImportType.CreateCalibrationComponent && MetaData.ImportType != CommonUtils.ImportType.UpdateCalibrationComponent) { DbImportResult.ErrorMessages.Add(IMPORT_TYPE_NOT_COMPATIBLE); return DbImportResult; } LoadCachedData(); CanCreateProperties = canCreateProperties; //Include Headers so we can match up the component properties (HDR=YES). string connString = BuildConnectionString(MetaData.FullFileName); using (OleDbConnection excelConn = new OleDbConnection(connString)) { IList<CalibrationComponentDataAdapter> importData = new List<CalibrationComponentDataAdapter>(); try { using (OleDbCommand cmd = new OleDbCommand()) { cmd.CommandTimeout = 600; cmd.Connection = excelConn; cmd.CommandText = CalibrationCommandText; if (excelConn.State != ConnectionState.Open) { excelConn.Open(); } List<string> spreadSheetPropertyNames = GetPropertyColumnHeadersFromDataSet(cmd, (int)CalibrationColumn.Notes + 1); if (spreadSheetPropertyNames.Count != spreadSheetPropertyNames.Distinct().Count()) { DbImportResult.ErrorMessages.Add(DuplicatePropertyNamesExistMessage()); return DbImportResult; } if (!WorkSheetCheckColumnNamesAreValid<CalibrationColumn>(GetColumnHeadersFromDataSet(cmd, (int)CalibrationColumn.Notes))) { DbImportResult.ErrorMessages.Add(ExcelWorkSheetColumnsNotValidMessage()); return DbImportResult; } using (OleDbDataReader dr = cmd.ExecuteReader()) { int rowNumber = 1; while (dr.Read()) { rowNumber++; CalibrationComponentDataAdapter adapter = new CalibrationComponentDataAdapter(dr, mExistingProperties, spreadSheetPropertyNames, rowNumber, CanCreateProperties, MetaData.ImportType); if (!adapter.IsValid()) { foreach (string errorMessage in adapter.ErrorMessages) { RaiseMessage(CommonUtils.MessageType.Error, errorMessage); } } else { importData.Add(adapter); } } excelConn.Close(); } } if (importData.Count == 0) { RaiseMessage(CommonUtils.MessageType.Warning, NoDataFoundForWorkSheetMessage()); return DbImportResult; } if (MetaData.ImportType == CommonUtils.ImportType.CreateCalibrationComponent) { InsertData(importData); } else if (MetaData.ImportType == CommonUtils.ImportType.UpdateCalibrationComponent) { UpdateData(importData); } DbImportResult.ImportedCount = mSavedResults.Count; return DbImportResult; } catch (OleDbException ex) { DbImportResult.ErrorMessages.Add(ex.ToString()); return DbImportResult; } finally { if (excelConn.State == ConnectionState.Open) { excelConn.Close(); } } } }
private void BuildPropertyValues(CalibrationComponent componentIn, CalibrationComponentDataAdapter adapter) { foreach (CalibrationPropertyDto dto in adapter.PropertyValues) { CalibrationProperty property = (from x in mExistingProperties where x.Name.ToLower() == dto.PropertyName.ToLower() select x).FirstOrDefault(); if (property == null) { if (CanCreateProperties) { property = new CalibrationProperty { Name = dto.PropertyName, Type = "not used", Description = "(created by importer.)" }; mExistingProperties.Add(property); //JOIN TABLE - joins the Property with the Type CalibrationComponentTypeProperty typePropertyJoin = new CalibrationComponentTypeProperty(); typePropertyJoin.CalibrationComponentType = componentIn.CalibrationComponentType; //EngineeringUnit if (dto.NewUnit != null) { CalibrationEngineeringUnit unit = (from x in mExistingUnits where x.Name == dto.NewUnit.Name select x).FirstOrDefault(); if (unit == null) { typePropertyJoin.CalibrationEngineeringUnit = dto.NewUnit; } else { typePropertyJoin.CalibrationEngineeringUnit = unit; } } property.CalibrationComponentTypeProperties.Add(typePropertyJoin); mExistingProperties.Add(property); } else { RaiseMessage(CommonUtils.MessageType.Error, string.Format("WorkSheet '{0}' Line '{1} Tag {2} Component Name {3}' : The property does not exist.", WorkSheetName, adapter.RowNumber, adapter.Tag, adapter.CalibrationName)); continue; } } else { //do we have a record in the join table for this property and comp type? CalibrationComponentTypeProperty equipmentComponentTypeProperty = (from x in Cee.CalibrationComponentTypeProperties where x.CalibrationComponentType.Name.ToLower() == componentIn.CalibrationComponentType.Name.ToLower() && x.CalibrationProperty.Name.ToLower() == property.Name.ToLower() select x).FirstOrDefault(); if (equipmentComponentTypeProperty == null) { ////no row in join table - so create one. CalibrationComponentTypeProperty typePropertyJoin = new CalibrationComponentTypeProperty(); if (dto.NewUnit != null) { CalibrationEngineeringUnit unit = (from x in mExistingUnits where x.Name == dto.NewUnit.Name select x).FirstOrDefault(); if (unit == null) { typePropertyJoin.CalibrationEngineeringUnit = dto.NewUnit; } else { typePropertyJoin.CalibrationEngineeringUnit = unit; } } typePropertyJoin.CalibrationComponentType = componentIn.CalibrationComponentType; property.CalibrationComponentTypeProperties.Add(typePropertyJoin); } } CalibrationComponentPropertyValue propertyValue = (from x in Cee.CalibrationComponentPropertyValues where x.CalibrationComponentId == componentIn.Id && x.CalibrationPropertyId == property.Id select x).FirstOrDefault(); if (propertyValue == null) { propertyValue = new CalibrationComponentPropertyValue {CalibrationComponent = componentIn, CalibrationProperty = property}; property.Type = "Text";//not used but not nullable property.EnableAsFound = false; //not used but not nullable } //Set AsFoundValue if (!string.IsNullOrEmpty(dto.AsFoundValue)) { propertyValue.Value = dto.AsFoundValue; } //Set AsLeftValue if (!string.IsNullOrEmpty(dto.AsLeftValue)) { propertyValue.Value2 = dto.AsLeftValue; } componentIn.CalibrationComponentPropertyValues.Add(propertyValue); } }