FeatureClass的三种Cursor

今天做了一个小功能,把Txt文件转成shp,txt中只有三列,分别是X,Y,Z值。生成shp时不指定坐标系。

代码很简单,写完后调试,报了一个错,为Hresult:0x80041051。AE开发比较讨厌的就是这种COM报错,基本上提示信息里没有任何有帮助的内容。后来仔细查看代码,发现把Cursor用错了。用了Update的cursor去做insert,改成用Insert的Cursor后程序就正常运行了。


FeatureClass有三类Cursor,分别由三个方法获取,Insert(),Update()和search()。一类Cursor只能做一种操作,用错Cursor就会报上面的COM错误。这一点因为和通用的数据库开发接口不一样,需要在开发中注意,如Oracle中Insert、Update,甚至delete,都合并用一种方式--Command的Execute实现,search()通过Adapter的Fill()实现。


向FeatureClass插入要素时,有两种方式:单个插入和批量插入。但凡做开发,就要考虑效率。因此除非实际需求是单条插入,否则要用批量。


单个插入方式实现:

Ifeatue  fe= IFeatureClass.createFeature();

fe.set_value();(shape字段要用Fe.shape=xx)

...

fe.store();


批量插入方式实现:

IFeatueBuffer  fb= IFeatureClass.createFeatureBuffer();

fb.set_value();

...

IFeatureCursor fcur=  IFeatureClass.insert(true);

fcur.insertFeature(fb);

i++

if(i%100 ==0)

fcur.flush();




你可能感兴趣的:(ArcEngine)