在ArcEngine中使用IEngineEditor编辑ArcSDE数据,BeginEditing时出现0x8004021F错误的解决办法
自己的插件GIS系统以前都是在使用Personal GeoDataBase做测试。运行稳定,至于你们信不信,反正我是信了。
在客户那里去部署,连接到SDE数据,启动编辑,提示了一个错误:0x8004021F。立即想到可能是数据库没有注册版本的问题。差了一下资料,在ArcEngine9.2开始就支持了Non-Versioned类型的SDE数据编辑。那问题出在哪里呢?
看了网上的一些资料,有人的解释是 “问题可能有几种,要么是SDE中对当前用户没开通插入、更新或删除权限,要么是没有注册为版本,要么是License没有选择GDB”。
1、当前用户就是SDE用户,权限没问题;
2、注册版本问题,也不会是,如果没有注册版本而不采用esriEngineEditSessionModeNonVersioned的模式报的错误号不是这个;
3、只有可能是许可的问题了。
由于采用的是插件系统,地图控件上使用了LicenseControl,而且也选择了EGDB的许可。应该没问题。
百思不得其解,于是新建了一个解决方案,放置了MapControl,LicenseControl,选择EGDB许可,添加一个Button,写了StartEditing方法。F5,运行,正常,没有任何问题。
将LicenseControl去处,在应用程序里用IAoInitialize初始化许可,运行,亦无问题。
是不是在插件系统中许可初始化位置有问题?于是在Main函数中添加许可初识化代码。运行,终于解决问题。
附图:
以上写的简单,真实的问题排除用了差不多半天的时间。在此,总结一下AE的许可初始化要点:
1、使用LicenseControl和IAoInitialize都可以进行许可的初始化;
2、在应用程序中只进行一次许可初始化操作,不要两种方式都用,更不要多个地方初始化;
3、如果程序结构简单,可以使用LicenseControl
4、对于插件式系统等结构复杂的情况,建议在应用程序启动函数中进行初始化操作;
5、初始化许可类型不是越多越好,根据需要初始化自己需要的就行,一般EGDB基本满足要求;多种许可类型反而会造成一些意想不到的问题。