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

相关文章
|
数据库
自然框架的源代码、Demo、数据库、配置信息管理程序下载(2011.1.7更新)
自然框架在线演示:http://demo.naturefw.com/ 目前在线演示不开放管理员账号。   自然框架的网站已经基本完成,下载就转到网站里面了,http://www.naturefw.com/down/List1.aspx 请到这里下载。
933 0
|
SQL 存储 关系型数据库
|
SQL Web App开发 JavaScript
Express框架使用以及数据库公共操作类整理(Win7下的NodeJs)
具体步骤: 1、安装开发工具WebStorm; 2、安装node/npm(下载地址:https://nodejs.org/download/)选择适合你的xxx.mis安装; 3、安装express框架(cmd窗口模式,用npm命令执行:npm install express); 4、创建n...
988 0
0x8002801D:库没有注册
同一段代码,在测试机上运行成功,但在用户机上运行失败,并报错:无法将类型为GeoProcessorClass的COM对象强制转换为接口类型IGeoProcessor,此操作失败的原因是COM组件调用QueryInterface因以下错误而失败:库没有注册。
1594 0