/// <summary> /// 删除图层 /// </summary> /// <param name="name"></param> /// <returns></returns> public static bool DeleteFeatureClass(this IWorkspace workspace, string name) { try { IEnumDatasetName pEnumDsName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass); IDatasetName datasetName = pEnumDsName.Next(); while (datasetName != null) { string[] name_arr = datasetName.Name.Split(new char[] { '.', '/', '\\' }); if (name_arr[name_arr.Length - 1].ToUpper() == (name.ToUpper())) { IFeatureWorkspaceManage pFWSM = workspace as IFeatureWorkspaceManage; if (pFWSM.CanDelete((IName)datasetName)) { pFWSM.DeleteByName(datasetName); break; } } datasetName = pEnumDsName.Next(); } return(true); } catch { return(false); } }
/// <summary> /// 删除特定数据集下的表 /// </summary> /// <param name="gdbPath">workspace</param> /// <param name="tableName">表名称</param> public static void DeleteTable(IWorkspace workspace, string tableName) { IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; IFeatureWorkspaceManage featureWorkspaceMange = (IFeatureWorkspaceManage)featureWorkspace; //得到的数据集是FeatureClass //IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass); IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTTable); IDatasetName datasetName = null; while ((datasetName = enumDatasetName.Next()) != null) { if (datasetName.Name.Equals(tableName)) { //删除指定要素类(表) featureWorkspaceMange.DeleteByName(datasetName); break; } } }
/// <summary> /// 删除名称包含指定关键字的要素类 /// </summary> /// <param name="workspace">工作空间</param> /// <param name="keyWord">关键字,不区分大小写</param> public static void DeleteFeatureClassesByKeyWord(this IWorkspace workspace, string keyWord) { if (!(workspace is IFeatureWorkspace featureWorkspace)) { throw new Exception("工作空间不是要素类工作空间!"); } keyWord = keyWord.ToLower(); IFeatureWorkspaceManage featureWorkspaceMange = (IFeatureWorkspaceManage)featureWorkspace; IEnumDatasetName enumDatasetName = workspace.DatasetNames[esriDatasetType.esriDTFeatureClass]; IDatasetName datasetName; while ((datasetName = enumDatasetName.Next()) != null) { if (datasetName.Name.ToLower().Contains(keyWord)) { featureWorkspaceMange.DeleteByName(datasetName);//删除指定要素类 } } }
/// <summary> /// 删除一个或多个要素类 /// </summary> /// <param name="workspace">工作空间</param> /// <param name="featueClassNames">要删除的要素类的名称,名称不区分大小写</param> public static void DeleteFeatureClasses(this IWorkspace workspace, params string[] featueClassNames) { if (!(workspace is IFeatureWorkspace featureWorkspace)) { throw new Exception("工作空间不是要素类工作空间!"); } featueClassNames = featueClassNames.Select(v => v.ToLower()).ToArray(); IFeatureWorkspaceManage featureWorkspaceMange = (IFeatureWorkspaceManage)featureWorkspace; IEnumDatasetName enumDatasetName = workspace.DatasetNames[esriDatasetType.esriDTFeatureClass]; IDatasetName datasetName; while ((datasetName = enumDatasetName.Next()) != null) { if (featueClassNames.Contains(datasetName.Name.ToLower())) { featureWorkspaceMange.DeleteByName(datasetName);//删除指定要素类 } } }
/// <summary> /// 删除特定数据集下的表 /// </summary> /// <param name="gdbPath">gdb路径</param> /// <param name="tableName">表名称</param> public static void DeleteFeatureClass(string gdbPath, string tableName) { IWorkspaceFactory worFact = new FileGDBWorkspaceFactory(); IWorkspace workspace = worFact.OpenFromFile(gdbPath, 0); IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; IFeatureWorkspaceManage featureWorkspaceMange = (IFeatureWorkspaceManage)featureWorkspace; //得到的数据集是FeatureClass //IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass); IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTTable); IDatasetName datasetName = null; while ((datasetName = enumDatasetName.Next()) != null) { if (datasetName.Name.Equals(tableName)) { //删除指定要素类(表) featureWorkspaceMange.DeleteByName(datasetName); break; } } }
//删除名称对象 public static void DeleteByName(IFeatureWorkspace pFeaWorkspace, IDatasetName pDatasetName) { IFeatureWorkspaceManage pWorkspaceManager = pFeaWorkspace as IFeatureWorkspaceManage; pWorkspaceManager?.DeleteByName(pDatasetName); }
/// <summary> /// 移除拓扑 /// </summary> /// <param name="pFeaDataet">数据集</param> /// <param name="pTopoName">拓扑名</param> /// <param name="outError">异常</param> public void RemoveTopo(IFeatureDataset pFeaDataet, string topoName, out Exception outError) { outError = null; //topoName = topoName + "_Topology"; IWorkspace pWorkspace = pFeaDataet.Workspace; IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureWorkspaceManage pFeatureWorkspaceManage = pFeatureWorkspace as IFeatureWorkspaceManage; //if (!((IWorkspaceEdit)pWorkspace).IsBeingEdited()) //{ // //((IWorkspaceEdit)pWorkspace).StartEditing(true); // //((IWorkspaceEdit)pWorkspace).StartEditOperation(); //} // int iCount = 0; // try // { try { ITopologyContainer pTopoCon = pFeaDataet as ITopologyContainer; ITopology pTopo = pTopoCon.get_TopologyByName(topoName); //ISchemaLock pLock = pTopo as ISchemaLock; //pLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock); ////删除该拓扑下所有的拓扑规则 //RemoveTopoRule(pTopo, out outError); //if (outError != null) return; ////删除该拓扑下左右的拓扑图层 //RemoveTopoClass(pTopo, out outError); //if (outError != null) return; //删除拓扑 IDataset pTopoDt = pTopo as IDataset; IName pName = pTopoDt.FullName; IDatasetName ptopodatasetname = pName as IDatasetName; pFeatureWorkspaceManage.DeleteByName(ptopodatasetname); //(pTopo as IDataset).Delete(); //pTopo.FeatureDataset.Delete(); //Marshal.ReleaseComObject(pTopo); pTopo = null; //++iCount; //pLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock); } catch (Exception ex) { ////********************************************* ////guozheng 2010-12-24 平安夜 added 系统异常日志 //if (ModData.SysLog == null) ModData.SysLog = new clsWriteSystemFunctionLog(); //ModData.SysLog.Write(ex); ////********************************************** outError = ex; } //} //finally //{ // if (((IWorkspaceEdit)pWorkspace).IsBeingEdited()) // { // if (iCount > 0) // { // ((IWorkspaceEdit)pWorkspace).StopEditOperation(); // ((IWorkspaceEdit)pWorkspace).StopEditing(true); // } // { // ((IWorkspaceEdit)pWorkspace).AbortEditOperation(); // ((IWorkspaceEdit)pWorkspace).StopEditing(true); // } // } //} }