ArcEngine GDB数据库查询方法总结

本文介绍了ArcEngine中四种查询接口的应用方法,包括常规ITable、IFeatureClass接口、IWorkspace.ExecuteSQL、IQueryDef接口及统计类的使用,涵盖了基本查询、SQL执行、聚合查询、多表联接等场景。
摘要由CSDN通过智能技术生成

对于关系数据库,ArcEngine定义了几种查询接口:

1,常规的ITable、IFeatureClass接口

    这是我们最常使用的,完成同一个表内的数据查询、更新操作

//IFeaturWorkspace pFWork;

ITable pTab=pFWork.OpenTable("DLTB");

IQueryFilter pqf=new QueryFilterClass();

pqf.WhereClause="DLBM like '01_'";

ICursor pCur=pTab.Search(pqf,true);

 

2,IWorkspace.ExecuteSQL

    能够执行关系数据库的所有DDL和DML类SQL语句。由于通过此函数执行Sql语句时会绕过ArcEngine的存贮机制,可能会破坏SDE数据的一致性(主要在更新SDE的系统表记录时),因此必须慎用。

    另外,由于此函数执行后不返回结果,决定了用此函数不能执行查询语句。

//下面执行向DLJX的历史档案表中更新记录(SqlServer语法)。

//作用是:给创建时间在2009-7-13之后已删除的记录的创建时间改为2009-1-1

//IWorkspace pWork;

pWork.ExecuteSQL("update DLJX_H set GDB_FROM_DATE='2009-1-1' where objectid=2 and GDB_FROM_DATE>'2009-7-13' and GDB_TO_DATE<'9999-12-31' ");

 

//下面创建一个表

pWork.ExecuteSQL("CREATE TABLE IDS(ID BIGINT NOT NULL,BINDTYPE VARCHAR(20))");

 

3,用IQueryDef接口执行各种查询。

    通过IQueryDef可以执行SQL数据库引擎所支持的所有查询,并且如果查询的表是要素类,还会正确返回要素类的最新数据(即使要素类启用了版本管理,且数据不更新到基表)

    还能执行一些有用的查询。举例如下:

//查询要素类数据

//IFeatureWorkspce pFWork;

//IQueryDef pQDef=pFWork.CreateQueryDef();

pQDef.Tables="DLJX";

pQDef.WhereClause="JXLX='97'";

ICursor pCur=pQDef.Evaluate();

 

//判断某个表是否存在(如果此表未登记成GeometryTable,通过IWorkspace2.NameExists可能获取不到)

pQDef.SubFields = "id";
pQDef.Tables = "sysobjects";
pQDef.WhereClause = "id = object_id(N'IDS') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
ICursor pCur=pQDef.Evaluate();
IRow pRow = pCur.NextRow();
if (pRow != null) {
 bExist = true;
}

 

//聚合查询

//注意:对返回字段的处理,由于ArcEngine只简单的以逗号切分了SubFields内容,

//因此,如果包含有逗号时,字段名需要依次后推,且不支持字段别名定义

pQDef.SubFields = "count(*),sum(TDZMJ),sum(KZZMJ),left(ZLDWDM,6)";
pQDef.Tables = "DLTB group by left(ZLDWDM,6)";

ICursor pCur=pQDef.Evaluate();

 

针对上面所返回的ICursor,实际记录虽然只有四个字段,但ICursor.Fields却有五个元素,各字段名为:

count(*)、sum(TDZMJ)、sum(KZZMJ)、left(ZLDWDM、6)

因此要取第四个字段的值,需要这样:

int iInx=pCur.FindField("left(ZLDWDM");

IRow pRow=pCur.NextRow();

string sDM=pRow.get_Value(iInx).ToString();

 

//多表联接查询

pQDef.Tables="DLTB a left join XZQ b on a.ZLDWDM=b.XZQDM"

ICursor pCur=pQDef.Evaluate();

 

4,使用ArcEngine的统计类(实现了IDataStatistics接口)

//ICursor pCur=pDLTBTable.Search(null,false);

IDataStatistics pDataStat = new DataStatisticsClass();
pDataStat.Field = "MJ";
pDataStat.Cursor = pCur;

IStatisticsResults pRes = dataStatistics.Statistics;
//pRes.Sum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值