直接来先看报错的代码:
这是很普通的连接Sql Server SDE的代码操作,
<code>/// <summary></code>
<code>/// 获取工作空间</code>
<code>public</code> <code>static</code> <code>IWorkspace GetWorkspace(IPropertySet pPropertySet)</code>
<code>{</code>
<code> </code><code>if</code> <code>(pPropertySet == </code><code>null</code><code>) {</code>
<code> </code><code>return</code> <code>null</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>// 创建 SDE 工作空间工厂,并打开工作空间 </code>
<code> </code><code>//Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory"); </code>
<code> </code><code>//var workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType); </code>
<code> </code><code>IWorkspaceFactory workspaceFactory = </code><code>new</code> <code>SdeWorkspaceFactoryClass();</code>
<code> </code><code>IWorkspace workspace = workspaceFactory.Open(pPropertySet, 0);</code>
<code> </code><code>return</code> <code>workspace;</code>
<code>}</code>
<code>/// 转换成属性设置</code>
<code>/// </summary></code>
<code>public</code> <code>static</code> <code>IPropertySet GePropertySet()</code>
<code> </code><code>IPropertySet pPropertySet = </code><code>new</code> <code>PropertySetClass();</code>
<code> </code><code>pPropertySet.SetProperty(</code><code>"SERVER"</code><code>, </code><code>"服务器IP"</code><code>);</code>
<code> </code><code>pPropertySet.SetProperty(</code><code>"INSTANCE"</code><code>, </code><code>string</code><code>.Format(</code><code>"sde:SQLServer:{0}"</code><code>, </code><code>"服务器IP"</code><code>));</code>
<code> </code><code>pPropertySet.SetProperty(</code><code>"DATABASE"</code><code>, </code><code>"数据库名称"</code><code>);</code>
<code> </code><code>pPropertySet.SetProperty(</code><code>"USER"</code><code>, </code><code>"sa"</code><code>);</code>
<code> </code><code>pPropertySet.SetProperty(</code><code>"PASSWORD"</code><code>, </code><code>"密码"</code><code>);</code>
<code> </code><code>//pPropertySet.SetProperty("VERSION", "SDE.DEFAULT");</code>
<code> </code><code>pPropertySet.SetProperty(</code><code>"AUTHENTICATION_MODE"</code><code>, </code><code>"DBMS"</code><code>);</code>
<code> </code><code>return</code> <code>pPropertySet;</code>
经测试SDE连接参数正常,可在Open方法时,报错"The Product License has not been initialized"(产品许可未初始化),程序是用代码初始化许可的,运行绑定Desktop,产品许可类别是Advanced(高级版)
在相同的环境下,另外一套程序又可以,比较两者的不同,似乎与MapControl控件存在某种关联,经反复测试,得出以下结果:使用AO的sample作对比,只要是先拖放MapControl控件,代码就不会报许可问题(先拖放许可、或不拖MapControl都不行)。
暂时是解决了这个问题,我们姑且认为是10.4的bug,虽然没有使用MapControl,但也拖放了这个控件(隐藏)。
我一直在想,既然它都能报这个错,肯定不是什么bug,而不是我们不知道错在哪里,经过一番测试,最终于不是通过许可方式解决它了。即在代码初始化许可是除了添加Advanced许可,还添加了ArcServer许可。

<a href="http://gis.stackexchange.com/questions/2090/product-license-not-initialized-error-when-trying-to-open-an-sde-connection-in-a">http://gis.stackexchange.com/questions/2090/product-license-not-initialized-error-when-trying-to-open-an-sde-connection-in-a</a>
<a href="http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html">http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#/LicenseInitializer/004800000005000000/</a>
本文转自我也是个傻瓜51CTO博客,原文链接:http://www.cnblogs.com/liweis/p/6666563.html ,如需转载请自行联系原作者