用ArcEngine做二次开发,做查询并对查询到的数据做修改是再正常不过的事情了!最近也做了一点这方面的学习。
在查询过程中,主要用到,Search、Select、Update等方法。
以下对几种方法做简要的介绍:
1、 用ISelectionSet接口查询,返回IDs,再根据IDs获取要素,我现在用的是这种方法,因为我频繁的查数据,如果用游标就会产生大量的游标,很容易出现如“不能打开其他表了”或“调用COM组件错误”等错误提示。
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "IDs=1";
ISelectionSet selectionSet = lastFclass.Select(pQueryFilter,
esriSelectionType.esriSelectionTypeIDSet,
esriSelectionOption.esriSelectionOptionNormal, lastDset.Workspace);
//use an IEnumIDs to read the SelectionSet IDs
IEnumIDs enumIDs = selectionSet.IDs;
int iD = enumIDs.Next();
if (iD == -1)
continue;
IFeature lastFeature = lastFclass.GetFeature(iD);
2、用游标查询(Search),少量的修改可以用此方法,并最后用Feature的store()方法保存修改。但此方法如果频繁使用,因游标的不断递增,占用内存较大!相比较而言,上一种方法占用的内存较小。
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "IDs=1";//例子,条件根据需要而定
IFeatureCursor pmFeatureCursor = currentFclass.Search(pQueryFilter, false);//.Update(null, false);
IFeature currentFeature = pmFeatureCursor.NextFeature();
while(currentFeature!=null)
{
currentFeature =pmFeatureCursor..NextFeature();
}
pmFeatureCursor.Flush()
3、用游标查询(Update),如果你想对查询的数据做修改,最好用Update方法
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "IDs=1";//例子,条件根据需要而定
IFeatureCursor pmFeatureCursor = currentFclass.Update(pQueryFilter, false);//.Update(null, false);
IFeature currentFeature = pmFeatureCursor.NextFeature();
while(currentFeature!=null)
{
//修改currentFeature要素字段值
……
……
pmFeatureCursor.UpdateFeature(currentFeature);//更新修改
currentFeature = pmFeatureCursor.NextFeature(); //遍历的游标
}
pmFeatureCursor.Flush()