ArcEngine注册版本编辑sde中的数据(解决报错0x80040356)

1、问题提出

在我的上一篇博文中(ArcGIS编辑SDE的矢量数据(集)(解决因版本化问题不能编辑))解决了在ArcGIS中编辑sde时遇到的未注册导致不能编辑的问题,同样,在ArcEngine中也可以用同样的思路解决这个问题。这个问题比较简单,所以为了增加篇幅,我在这篇博文中整理了一下我解决ArcEngine问题的一贯思路,如果比较赶时间可以跳过第二部分。

2、解决思路

我始终坚信遇到问题最好的解决办法第一是帮助文档,第二是百度谷歌,所以在已经知道在ArcGIS中如何解决这个问题之后就可以在帮助文档中查找相关内容,我们在帮助文档中搜索“RegisterAsVersioned”,得到了下图的结果:
搜索结果

这就可以知道我们应该调用“IVersionedObject”接口,按照ArcGIS的一贯做法,当然是调用最新的接口IVersionedObject3。

接下来我们把目光转移到对象模型图(安装ao的路径下找),这个接口是在ESRI.ArcGIS.Geodatabase命名空间下,所以可以打开“GeoDatabaseObjectModel”,搜索IVersionedObject3,得到这个接口是在这里,这是个抽象类:
对象模型图
所以我们可以这样去实现它:

IVersionedObject3 versionedObject = pDataSet as IVersionedObject3;

接下来的步骤就和在arcgis中实现基本上一样了。

3、代码实现:

网上我找了很多资料,这些代码大多只是将编辑的模式设置未版本化模式,但是并没有说怎样进行版本化,所以,首先先判断这个数据集是否已经注册了版本,如果注册了版本就直接设置编辑模式未版本化编辑,否则,就需要先注册版本再编辑。按照这个逻辑,代码就应该是这样的:

                if (pWorkspace.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace)
                {
                    IVersionedObject3 versionedObject = pDataSet as IVersionedObject3;
                    //注册版本
                    if (versionedObject != null)
                    {
                        versionedObject.RegisterAsVersioned(true);
                    }
                    pEngineEditor.EditSessionMode = esriEngineEditSessionMode.esriEngineEditSessionModeVersioned;
                }
                //else
                //{
                //    pEngineEditor.EditSessionMode = esriEngineEditSessionMode.esriEngineEditSessionModeNonVersioned;
                //}
                //设置编辑任务
                pEngineEditor.StartEditing(pWorkspace, pMap);

如果对没有注册版本的sde数据集抢行进行编辑操作,那么就会报错:HRESULT:0x80040356

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值