遇到的问题、值得记录的东西,杂乱的记一下。
一、奇怪的数据类型支持
环境:arcengine 10.0,oracle10g+sde10.0
ORACLE+sde库中有个string类型的字段,一般设置里面值为1,其他时候设置值为0或为空NULL。
在查询时发现wherecause语句写法都可以:即使是string也可以像int那样查询,不知道这是什么莫名其妙的问题。
//类似int数值的写法 string isCause1 = "( WASTEDEVICE = 1 )"; //这才是string类型的写法 string isCause2 = "( WASTEDEVICE = '1' )";
同理,以下也是一样的
string isCause = "(WASTEDEVICE <> 1)"; string isCause = "(WASTEDEVICE <> '1')";
二、ArcGIS Engine空间高效查询(IIdentify方法)
利用ArcEngine空间查询,大多数人会马上想到利用IQueryFilter接口,的确,IQueryFilter接口是我们经常使用的查询接口而且使用比较简单,但是在大数据量查询数据,尤其是空间查询时效率会很低,导致速度会很慢。
给大家推荐一个接口,给刚刚入门或者还不知道该接口的朋友提供一点参考。
IIdentify
IIdentify继承了FeatureLayer、RasterLayer、CadFeatureLayer等N种图层种类,而且查询效率比IQueryFilter要高
缺点:只有与查询图形相交一种查询方式没有IQueryfilter的查询方式多样
详细方法查看hl3292博友的 ArcGIS Engine空间高效查询(IIdentify方法)-已解决
三、查询结果排序
据一些文档说,IQueryFilter 里的类SQL语句不支持排序,这时使用ITableSort接口。
IQueryFilter、ISpatialFilter接口可以转IQueryFilterDefinition接口设置Order By和Group By语句。虽然有些帮助文档说不能使用Order By和Group By语句,但是其实是可以的,只可以用在GeoDatabase,不能用于ShapeFile和Coverage数据。例子如下
queryDef.Tables = “tableA Group by Field01”; queryDef.SubFields = “Field01”; 或者 queryDef.Tables = “tableA”; queryDef.SubFields = “Field01, COUNT(Field01)”; queryDef.WhereClause = “Field01 is not null GROUP BY Field01 HAVING COUNT(Field01) > 1”;
待续………………