SDE操作的许可问题

简介: ArcGIS二次开发和ArcGIS桌面应用中,许可是一个老生常谈的问题。以前也小结过一些经验。参考: http://www.cnblogs.com/liweis/p/4185311.html 问题描述 直接来先看报错的代码: 这是很普通的连接Sql Server SDE的代码操作,   ...

ArcGIS二次开发和ArcGIS桌面应用中,许可是一个老生常谈的问题。以前也小结过一些经验。参考:

http://www.cnblogs.com/liweis/p/4185311.html

问题描述

直接来先看报错的代码:

这是很普通的连接Sql Server SDE的代码操作,

 

/// <summary>
/// 获取工作空间
public static IWorkspace GetWorkspace(IPropertySet pPropertySet) 
{
    if (pPropertySet == null) {
        return null;
    }

    // 创建 SDE 工作空间工厂,并打开工作空间  
    //Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");  
    //var workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);  
    IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactoryClass();
    IWorkspace workspace = workspaceFactory.Open(pPropertySet, 0);
    return workspace;
}

/// <summary>
/// 转换成属性设置
/// </summary>
public static IPropertySet GePropertySet() 
{
    IPropertySet pPropertySet = new PropertySetClass();
    pPropertySet.SetProperty("SERVER", "服务器IP");
    pPropertySet.SetProperty("INSTANCE", string.Format("sde:SQLServer:{0}", "服务器IP"));
    pPropertySet.SetProperty("DATABASE", "数据库名称");
    pPropertySet.SetProperty("USER", "sa");
    pPropertySet.SetProperty("PASSWORD", "密码");
    //pPropertySet.SetProperty("VERSION", "SDE.DEFAULT");
    pPropertySet.SetProperty("AUTHENTICATION_MODE", "DBMS");
    return pPropertySet;
}

 

  

 

经测试SDE连接参数正常,可在Open方法时,报错"The Product License has not been initialized"(产品许可未初始化),程序是用代码初始化许可的,运行绑定Desktop,产品许可类别是Advanced(高级版)

解决问题

在相同的环境下,另外一套程序又可以,比较两者的不同,似乎与MapControl控件存在某种关联,经反复测试,得出以下结果:使用AO的sample作对比,只要是先拖放MapControl控件,代码就不会报许可问题(先拖放许可、或不拖MapControl都不行)。

暂时是解决了这个问题,我们姑且认为是10.4的bug,虽然没有使用MapControl,但也拖放了这个控件(隐藏)。

我一直在想,既然它都能报这个错,肯定不是什么bug,而不是我们不知道错在哪里,经过一番测试,最终于不是通过许可方式解决它了。即在代码初始化许可是除了添加Advanced许可,还添加了ArcServer许可

参考文章

http://gis.stackexchange.com/questions/2090/product-license-not-initialized-error-when-trying-to-open-an-sde-connection-in-a

http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#/LicenseInitializer/004800000005000000/

 

目录
相关文章
|
Linux
11.8 Linux查询已建立好的磁盘配额(quota和repquota命令)
对于建立好的磁盘配额,还需要有效的查询配额的手段,这样才能知道系统中到底有哪些分区设定了哪些配额。
251 0
11.8 Linux查询已建立好的磁盘配额(quota和repquota命令)
|
Linux
linux的基本权限和附加权限及归属
linux的基本权限和附加权限及归属
289 0
|
数据安全/隐私保护 数据库管理 数据库
|
测试技术 数据库