ArcSDE 版本注册的方法及问题解决

简介:  在用arc engine开发业务系统时,可能会进行开发版本管理这样的一个功能,版本管理中就会涉及到要素集的版本注册的需求。这时候问题就出现了,当sde被其他用户连接时, 要注册版本的要素集就会被其他用户锁定,这时候注册版本就会提示该要素集已被其他用户锁定。

 在用arc engine开发业务系统时,可能会进行开发版本管理这样的一个功能,版本管理中就会涉及到要素集的版本注册的需求。这时候问题就出现了,当sde被其他用户连接时, 要注册版本的要素集就会被其他用户锁定,这时候注册版本就会提示该要素集已被其他用户锁定。所以在进行版本注册的时候,需要将其他用户断开连接,但是自身的连接需要保留。断开用户连接的代码如下:


private void DisconnectUsers(IWorkspace wkspace)
        {
            try
            {                
                IDatabaseConnectionInfo4 pDCinfo = wkspace as IDatabaseConnectionInfo4;
                IEnumUserInfo pEnmUsers = pDCinfo.ConnectedUsers;
                IUserInfo pUser = pEnmUsers.Next();
                while(pUser!=null)
                {
                    if(!pUser.IsOwnConnection)
                    {
                        pDCinfo.DisconnectUser(pUser.SessionID);
                    }
                    pUser = pEnmUsers.Next();
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }


注意:参数Workspace必须是你的应用程序用的mxd所使用的工作空间对象实例,否则会被断开连接,后续的查看属性表等操作将会报错。获取mxd的工作空间对象实例代码如下:


    IHookHelper pHookHelper = new HookHelper();
    pHookHelper.Hook = axMapControl.Object;
    IFeatureLayer pFlayer =GetFeatureLayerByLayerName(pHookHelper, "LayerName");
    IWorkspace _sdeWorkSpace = (pFlayer.FeatureClass as IDataset).Workspace;

       /// <summary>
        /// 根据图层名称获取当前地图文档中的指定要素图层
        /// </summary>
        /// <param name="hookHelper">钩子对象</param>
        /// <param name="layerName">图层名称</param>
        /// <returns></returns>
        public IFeatureLayer GetFeatureLayerByLayerName(IHookHelper hookHelper, string layerName)
        {
            UID pFluid = new UIDClass();
            pFluid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";// IFeatureLayer
            if (hookHelper.FocusMap.LayerCount == 0)
            {
                return null;
            }
            IEnumLayer pLayers = hookHelper.FocusMap.get_Layers(pFluid, true);
            ILayer pLayer = pLayers.Next();
            while (pLayer != null)
            {
                if (pLayer.Name == layerName)
                {
                    return pLayer as IFeatureLayer;
                }
                pLayer = pLayers.Next();
            }
            return null;
        }

"LayerName"参数是mxd里的某一个图层的名称。

  接下来进行要素集的版本注册:


 var versionobj = _selectDataset as IVersionedObject;

 if (verobj != null && (!verobj.IsRegisteredAsVersioned))
   {
         verobj.RegisterAsVersioned(true);                
   }
   else
    { MessageBox.Show("注册版本失败"); }

完整的代码如下:

private void button_register_Click(object sender, EventArgs e)
        {
            try
            {
                if (_selectDataset != null)
                {

                    IHookHelper pHookHelper = new HookHelper();
                     pHookHelper.Hook = axMapControl.Object;
                     IFeatureLayer pFlayer =GetFeatureLayerByLayerName(pHookHelper, "LayerName");
                     IWorkspace _sdeWorkSpace = (pFlayer.FeatureClass as IDataset).Workspace;
                    //先断开其他用户的连接
                    DisconnectUsers(_sdeWorkSpace);

                    var versionobj = _selectDataset as IVersionedObject;
                    if (verobj != null && (!verobj.IsRegisteredAsVersioned))
                    {
                            verobj.RegisterAsVersioned(true);                
                    }
                    else
                     { MessageBox.Show("注册版本失败"); }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }           
        }

以上就是一个完整的arcsde版本注册的方法,希望对您有所帮助!

欢迎关注微信公众号“GIS带我奔跑”获取更多GIS前沿开发技术、行业应用和最新资讯。

114f2af20b8b7a74778c95cf24de71cb06fc6b08

相关文章
源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决
源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决
|
监控 应用服务中间件 BI
nginx日志统计分析自动报表工具goaccess(推荐)
## 功能描述 - nginx日志统计分析自动报表工具goaccess(推荐) - 网站总访问量统计,按天统计访问量,按页面(不同URL)统计访问量(不包括JS、css),按静态页面统计访问量(包括JS、css),不存在的页面统计访问量 - 按不同的IP统计访问量,按不同的操作系统统计访问量,...
8036 0
|
SQL 自然语言处理 关系型数据库
在 PostgreSQL 中使用 `REPLACE` 函数
【8月更文挑战第8天】
1805 9
在 PostgreSQL 中使用 `REPLACE` 函数
|
IDE 测试技术 开发工具
NumPy 代码调试与错误处理
【8月更文第30天】NumPy 是 Python 中用于科学计算的核心库之一,提供了高性能的多维数组对象和大量的数学函数。尽管 NumPy 提供了许多方便的功能,但在实际编程过程中难免会遇到各种各样的问题。本文将介绍一些调试 NumPy 代码的技巧,并讨论如何处理常见的错误。
732 2
|
运维 数据安全/隐私保护 网络协议
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项例题(七)
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项例题(七)
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项例题(七)
|
机器学习/深度学习 人工智能 算法
【机器学习】概率模型在机器学习中的应用:以朴素贝叶斯分类去为例
【机器学习】概率模型在机器学习中的应用:以朴素贝叶斯分类去为例
286 0
|
关系型数据库 MySQL 数据库
mysql下的max_allowed_packet参数设置
mysql下的max_allowed_packet参数设置
1504 0
|
SQL 关系型数据库 MySQL
【MySQL】:分组查询、排序查询、分页查询、以及执行顺序
【MySQL】:分组查询、排序查询、分页查询、以及执行顺序
504 0
|
Java 数据库
SpringBoot整合MybatisPlus【超详细】
SpringBoot整合MybatisPlus【超详细】
SpringBoot整合MybatisPlus【超详细】
|
存储 传感器
【STM32基础 CubeMX】uart串口通信
【STM32基础 CubeMX】uart串口通信
988 0