public PipeComponentDataAdapter(OleDbDataReader dr, List<PipeProperty> existingPipeComponentProperties, IList<string> componentPropertyNames, int rowNumber, bool canCreateProperties) { string pipeName = dr.SafeString((int)PipeComponentColumn.Tag); if (!ParseTagNumberToProperties(pipeName, rowNumber)) { return; } RowNumber = rowNumber; Tag = dr.SafeString((int)PipeComponentColumn.Tag); PipeDataAdapter adpter = new PipeDataAdapter(Tag); if (adpter.HasValidParts) { this.PipeAdapter = adpter; } else { ErrorMessages.Add(string.Format("Tag '{0}', row {2}, Component Name '{1}'. Pipe Tag is not in a valid format.", Tag, ComponentName, rowNumber)); } ComponentType = dr.SafeString((int)PipeComponentColumn.ComponentType); ComponentAreaNumber = dr.SafeString((int)PipeComponentColumn.ComponentAreaNumber); ComponentSubArea = dr.SafeNullableInt((int)PipeComponentColumn.ComponentSubArea); ComponentNumber = dr.SafeNullableInt((int)PipeComponentColumn.ComponentNumber); Manufacturer = dr.SafeString((int)PipeComponentColumn.Manufacturer); Model = dr.SafeString((int)PipeComponentColumn.Model); if (!ComponentSubArea.HasValue) { ErrorMessages.Add(string.Format("Tag {0}, row {1}. The ComponentSubArea is blank.", Tag, rowNumber)); } if (!ComponentNumber.HasValue) { ErrorMessages.Add(string.Format("Tag {0}, row {1}. The ComponentNumber is blank.", Tag, rowNumber)); } if (string.IsNullOrEmpty(ComponentType)) { ErrorMessages.Add(string.Format("Tag {0}, row {1}. The ComponentType is blank.", Tag, rowNumber)); } ComponentDescription = dr.SafeString((int)PipeComponentColumn.ComponentDescription); int k = 0; const int StartColumnIndex = (int)PipeComponentColumn.Model + 1; for (int i = StartColumnIndex; i < StartColumnIndex + componentPropertyNames.Count; i++) { if (string.IsNullOrEmpty(dr.SafeString(i))) { continue; } string propertyName = componentPropertyNames[k]; k++; PipeProperty property = (from x in existingPipeComponentProperties where x.Name.ToLower() == propertyName.ToLower() select x).FirstOrDefault(); if (property != null) { //we can grab the value; PropertyValues.Add(property.Name, dr.SafeString(i)); } else { if (canCreateProperties) { if (!PropertyValues.ContainsValue(dr.SafeString(i))) { PropertyValues.Add(propertyName, dr.SafeString(i)); } } else { RaiseMissingPropertyMessage(PipeTag, rowNumber, propertyName); break; } } } }
public override DbImportResult Import(bool canCreateProperties = false) { DbImportResult = new DbImportResult(); if (MetaData.ImportType != CommonUtils.ImportType.CreatePipe && MetaData.ImportType != CommonUtils.ImportType.UpdatePipe) { DbImportResult.ErrorMessages.Add(IMPORT_TYPE_NOT_COMPATIBLE); return DbImportResult; } string connString = BuildConnectionString(MetaData.FullFileName); IList<PipeDataAdapter> importData = new List<PipeDataAdapter>(); using (var excelConn = new OleDbConnection(connString)) { try { using (var cmd = new OleDbCommand()) { cmd.CommandTimeout = 600; cmd.Connection = excelConn; cmd.CommandText = PipeCommandText; excelConn.Open(); if (!WorkSheetCheckColumnNamesAreValid<PipeColumn>(GetColumnHeadersFromDataSet(cmd, (int) PipeColumn.IsActive))) { DbImportResult.ErrorMessages.Add(ExcelWorkSheetColumnsNotValidMessage()); return DbImportResult; } int k = 1; using (OleDbDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { k++; var pipeDataAdapter = new PipeDataAdapter(dr, WorkSheetName, k); importData.Add(pipeDataAdapter); } excelConn.Close(); } } if (MetaData.ImportType == CommonUtils.ImportType.CreatePipe) { InsertData(importData); } else if (MetaData.ImportType == CommonUtils.ImportType.UpdatePipe) { 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(); } } } }