首页 > 代码库 > arcgis engine删除数据及数据导入速度较快的方法
arcgis engine删除数据及数据导入速度较快的方法
最近利用arcgis engine开发一款用于审核软件,需要先进行图形库的建立,还有些原始数据经过一些处理形成需要的数据。
代码实现的过程中发现数据进行过处理以后,数据量比较大,几万条的Feature一条条写入sde库速度让人无法忍受。然后在网上查了不少资料,发现多数类似于shape导入sde的时候都是用游标一条条插入的。但是也找到了一个方法,虽然也需要一些时间,但是总体比游标快太多了,记录在此。
1 /// <summary> 2 /// 图层导入数据集 3 /// </summary> 4 /// <param name="lName">源图层的IName</param> 5 /// <param name="inWorkspace">源图层所在的工作空间</param> 6 /// <param name="featureDataset">目标数据集</param> 7 /// <returns>返回导入成功(true),失败(false)</returns> 8 private bool ImportLayerIntoDataset(IName lName, IWorkspace inWorkspace, IFeatureDataset featureDataset, string strOutFeatureName) 9 {10 try11 {12 IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();13 IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;14 15 IFeatureClassName outFeatureClassName = new FeatureClassNameClass();16 IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;17 IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;18 IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;19 outDatasetName.WorkspaceName = outWorkspaceName;20 outDatasetName.Name = "SDE." + strOutFeatureName;21 22 IFieldChecker fieldChecker = new FieldCheckerClass();23 IFields outFeatureClassFields;24 IFields inFeatureClassFields = inFeatureClass.Fields;25 IEnumFieldError enumFieldError;26 fieldChecker.InputWorkspace = inWorkspace;27 fieldChecker.ValidateWorkspace = featureDataset.Workspace;28 29 fieldChecker.Validate(inFeatureClassFields, out enumFieldError, out outFeatureClassFields);30 IField geometryField;31 geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));32 IGeometryDef geometryDef = geometryField.GeometryDef;33 IQueryFilter qf = new QueryFilterClass();34 qf.WhereClause = "";35 IFeatureDataConverter fctofc = new FeatureDataConverterClass();36 IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName, qf, (IFeatureDatasetName)featureDataset.FullName, outFeatureClassName, geometryDef, outFeatureClassFields, "", 1000, 0);37 38 return true;39 }40 catch (Exception ex)41 {42 MessageBox.Show(ex.Message);43 return false;44 }45 }
ConvertFeatureClass在文档中的解释为:Converts a featureClass to a Personal Geodatabase/Geodatabase featureClass.
1 IDataset pDataset = pFeatureClass as IDataset;2 IName pName = pDataset.FullName;3 4 IWorkspace pWorkspace = pDataset.Workspace;
通过IFeatureClass上述方式即可获得函数的参数。
另:由于做删除数据的时候,脑子秀逗了下,忘记解锁数据了,导致删除后图形能在图上显示,但是数据表里没有数据了。当时查找了各种删除数据的方式,主要也是游标的方式一条条的删除。但是看到有人介绍了好几种删除的方式,只记下了一种,也算是删除速度最快的一种。
1 string strSQL="delete from " + pFeatureClass.AliasName + " where XMBH = ‘" + strProjectID + "‘";2 IDataset pDataset = pFeatureClass as IDataset;3 pDataset.Workspace.ExecuteSQL(strSQL);
-------记录GIS学习的小心得
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。