今天做了一个小功能,把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();
批量插入方式实现:
IFeatueBu