直接来先看报错的代码:
这是很普通的连接Sql Server SDE的代码操作,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/// <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许可。
参考文章
本文转自我也是个傻瓜51CTO博客,原文链接:http://www.cnblogs.com/liweis/p/6666563.html ,如需转载请自行联系原作者