在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基本满足要求;多种许可类型反而会造成一些意想不到的问题。

posted @   伸手不见五趾  阅读(2283)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示