深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

1、         查找数据Search Cursors  //by yl landgis@126.com  yanleigis@21cn.com 2008.7.7

[C#]

//Create an envelope for the lower right portion of data

IEnvelope envelope = new EnvelopeClass();

envelope.PutCoords(508786, 681196, 513033, 684341);



// create a spatial query filter

ISpatialFilter spatialFilter = new SpatialFilterClass();



// specify the geometry to query with

spatialFilter.Geometry = envelope;



// specify what the geometry field is called on the Feature Class that we will querying against

String shpFld = featureClass.ShapeFieldName;

spatialFilter.GeometryField = shpFld;



// specify the type of spatial operation to use

spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;

// perform the query and use a cursor to hold the results

IQueryFilter queryFilter = new QueryFilterClass();

queryFilter = (IQueryFilter)spatialFilter;



IFeatureCursor searchCursor = featureClass.Search(queryFilter, true);//只查询,true快一些



IFeature feature = searchCursor.NextFeature();

int n = 0;

while (feature != null)

{

n++;

feature = baseCursor.NextFeature();

}





2、 插入数据Insert Cursors—目前数据插入最快的方法 //by yl landgis@126.com yanleigis@21cn.com 2008.7.7
//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//Create insert feature cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
//All of the features to be created were installed by "B Pierce"
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "B Pierce");
for (int ic = 0; ic < 99; ic++) {
//Set the featurebuffers's shape
featureBuffer.Shape = geometry
//Insert the feature into the feature cursor
featureOID = featureCursor.InsertFeature(featureBuffer);

}

//All of the features to be created were installed by "K Johnston"
featureBuffer.set_Value(featureBuffer.Fields.FindField("InstBy"), "K Johnston");
for (int ic = 0; ic < 99; ic++){
//Set the feature's shape
featureBuffer.Shape = geometry
//Insert the feature into the feature cursor
featureOID = featureCursor.InsertFeature(featureBuffer);
}
featureCursor.Flush();

3、 数据删除 delete //by yl landgis@126.com yanleigis@21cn.com 2008.7.7

IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Parcels");



IQueryFilter queryFilter = new QueryFilterClass();

queryFilter.WhereClause = "ZONING_S = 'R'";



// use IFeatureClass::Update to populate IFeatureCursor

IFeatureCursor updateCursor = featureClass.Update(queryFilter, false);



IFeature feature = updateCursor.NextFeature();



int m = 0;

while (feature != null)

{

m++;

updateCursor.DeleteFeature(feature);

feature = updateCursor.NextFeature();

}





4、 数据更新 update //by yl landgis@126.com yanleigis@21cn.com 2008.7.7

IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Parcels");



// restrict the number of features to be updated.

IQueryFilter queryFilter = new QueryFilterClass();

queryFilter.WhereClause = "ZONING_S = 'U'";



// use IFeatureClass::Update to populate IFeatureCursor

IFeatureCursor updateCursor = featureClass.Update(queryFilter, false);



int fieldindex = featureClass.FindField("ZONING_S");



IFeature feature = updateCursor.NextFeature();



int m = 0;

while (feature != null)

{

m++;

feature.set_Value(fieldindex, "X");

updateCursor.UpdateFeature(feature);

feature = updateCursor.NextFeature();

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shuchengzhang/archive/2009/07/08/4332113.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值