private ExtendTask GetTaskFromDataRow(DataRow rowTask) { if (rowTask == null) return null; // Task本身 ExtendTask task = new ExtendTask(); task.DatasourceType = (enumDataType)rowTask["DataType"]; task.MapScale = (int)rowTask["MapScale"]; task.Name = rowTask["TaskName"] as string; task.Path = rowTask["TaskPath"] as string; task.SourcePath = rowTask["Datasource"] as string; task.StandardName = cmbStandard.SelectedItem as string; task.SchemaID = ((KeyValuePair<string, string>)cmbSchema.SelectedItem).Key; task.TopoTolerance = Convert.ToDouble( rowTask["TopoTolerance"]); task.UseSourceDirectly = (bool)rowTask["UseSourceDirectly"]; task.Messager = this.MessageHandler; // DataImport IDataImport dataImporter = null; if (task.DatasourceType == enumDataType.VCT) { dataImporter = new VCTDataImport(); } else { NoReferenceDataImport noRefDataImport = new NoReferenceDataImport(); noRefDataImport.ReferenceLayer = ((KeyValuePair<string, string>)cmbSpatialRefLayer.SelectedItem).Key; dataImporter = noRefDataImport; } dataImporter.ImportingObjectChanged+=new ImportingObjectChangedHandler(dataImporter_ImportingObjectChanged); task.DataImporter = dataImporter; string strCheckMode = rowTask["CheckMode"] as string; enumCheckMode checkMode = enumCheckMode.CreateOnly; if (strCheckMode == Text_CheckMode_CheckPartly) { checkMode = enumCheckMode.CheckPartly; } if (strCheckMode == Text_CheckMode_CheckAll) { checkMode = enumCheckMode.CheckAll; task.ReadyForCheck(true); } task.CheckMode = checkMode; task.RuleInfos = rowTask["Hy.Check.Rules"] as List<SchemaRuleEx>; return task; }
private bool PrepareForWorkspace(IWorkspace wsTarget, out string strBaseName, out string strQueryName, out enumDataType baseDataType) { strBaseName = null; strQueryName = null; baseDataType = enumDataType.FileGDB; try { string strPath = wsTarget.PathName; IDataImport dataImport = new NoReferenceDataImport(); dataImport.ImportingObjectChanged += new ImportingObjectChangedHandler(DataImport_ImportingObjectChanged); dataImport.Datasource = strPath; dataImport.TargetPath = TempPath; dataImport.JustCopy = true; // 获取空间参考 ISpatialReference spatialRef = null; IEnumDataset enDataset = wsTarget.get_Datasets(esriDatasetType.esriDTAny); IDataset dsCurrent = enDataset.Next(); while (dsCurrent != null) { if (dsCurrent is IGeoDataset) { spatialRef = (dsCurrent as IGeoDataset).SpatialReference; break; } dsCurrent = enDataset.Next(); } dataImport.SpatialReference = spatialRef; enumDataType dataType = enumDataType.PGDB; // 设置数据类型 string strName = System.IO.Path.GetExtension(strPath); if (string.IsNullOrEmpty(strName)) // Shp File { dataType = enumDataType.SHP; } else if (strName.ToLower() == ".gdb") { dataType = enumDataType.FileGDB; } else // MDB { dataType = enumDataType.PGDB; } dataImport.DataType = dataType; if (dataType != enumDataType.PGDB) { AEAccessFactory.CreatePGDB(TempPath, "Query.mdb"); } dataImport.Import(); // 获取Base/Query库Workspace和ADO连接 strBaseName = (dataType == enumDataType.PGDB ? "Base.mdb" : (dataType == enumDataType.FileGDB ? "Base.gdb" : "Base")); strQueryName = (dataType == enumDataType.PGDB ? strBaseName : "Query.mdb"); baseDataType = dataType; return true; } catch { return false; } }