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;
                    }
                }
            }
        }
Example #2
0
        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();
                    }
                }
            }
        }