|
|
|
|

理解ArcObjects中的游标(2)

(本文转自 浩淼的天空 http://www.hmgis.cn) Cursor Class 正如前面提到的,cursor类是用于产生一个与数据库表进行交互交互的对象。在AO中,cursor类是一个非实例化对象,它意味着你必须使用另一个对象来获得一个cursor类的实例。既然如此,在AO中,表...

作者:浩淼的天空来源:http://www.hmgis.cn|2006年12月29日

(本文转自 浩淼的天空  http://www.hmgis.cn)

Cursor Class

正如前面提到的,cursor类是用于产生一个与数据库表进行交互交互的对象。在AO中,cursor类是一个非实例化对象,它意味着你必须使用另一个对象来获得一个cursor类的实例。既然如此,在AO中,表类被用于产生一个cursor类的实例,表类包含了三种方法能够产生一个cursor类的实例,而返回的cursor类型取决于程序员调用的方法。Fig1显示了AO中的Table Class的OMD。ITable接口拥有三种方法能够返回特定类型的cursor。ITable接口的Search、Insert和Update方法能够用于返回cursor实例。这些方法的名字与返回的cursor类型相对应。

在这些方法其中一个被调用以后,AO返回一个ICursor的实例。Fig2显示了一个Cursor类的OMD,Search、Insert和Update都可以返回一个ICursor的实例。ICursor有一个属性Fields和许多能够操作记录子集的方法,但这些方法是否可用取决于你使用的cursor类型。例如,如果你产生了一个search cursor,当你调用InsertRow和UpdateRow方法聚会返回一个错误。

FeatureCursor Class

FeatureCursor类与Cursor类非常相似,其区别在于前者是操作地理数据集而后者是操作传统数据库表。shapefile和geodatabase的地理数据集在AO中表现为一个AO 要素类的形式。与cursor类相似,FeatureCursor类也是一个通过FeatureClass对象的方法产生的非实例化对象。与ITable接口类似,IFeatureClass接口也包含了Search、Insert和Update方法用于返回一个IFeatureCursor实例。

在其中一个方法被调用后,一个IFeatureCursor的实例将会被返回,IFeatureCursor可以的属性和方法尽管与ICursor的在名字上稍微不同,但其功能却是差别很大,例如,InsertFeature VS InsertRow。

使用属性和空间约束条件

看看FeatureClass和Table的OMD图,查找Search、Insert和Update方法。注意每一个方法都可以用于返回一个cursor,cursor包含了一个参数,这个参数是IQueryFilter的实例。注意IQueryFilter参数,IQueryFilter是一个可以在内存中产生用于限制记录子集的对象。

例如,如果正在查询一个parcel数据库,你可能需要限制返回的parcels结果,让它们的值都大于10万美元。你可以使用IQueryFilter接口来约束。除此以外,如果你使用一个FeatureClass对象,还可以使用ISpatialFilter接口来产生SpatialFilter。这样你可以返回所有在洪水区的parcel(使用空间查询),且其价值高于10万美元(使用属性查询)。记住空间查询只能用于要素类上,如果在一个数据库表上使用空间查询则会返回错误,因为没有地理对象可以用过滤器过虑。让我们看看QueryFilter和SpatialFilter类的细节。

上一篇:理解ArcObjects中的游标(1)

下一篇:理解ArcObjects中的游标(3)