本人刚开始接触AE开发,对问题的看法难免有所疏忽,解决方法和叙述方法难免有所纰漏,还望各位大神加以纠正、不惜赐教,大家共同进步,不胜感激!!
AE开发,连接SQL Server数据库,报错-2147216127。找了很多原因,许可问题、service服务问题、版本兼容问题、属性参数设置问题,但统统都不是。搞了好几天,最后发现是把两种连接方式需要的属性参数给搞混了。自己是准备直接连接的,所有就没有装ArcSDE软件,但是自己连接文件的属性参数是按照通过SDE连接方式的设置的,因此一直报错。
首先,还是介绍一下这个错误-2147216127,在一个单独的应用程序中,通过ESRI OLEDB provider和ArcSDE 连接打开一个ADO连接,可能会出现此类错误。原因是因为本地系统路径变量不包含SDE连接DLLs位置。 自己都没装ArcSDE软件当然没有这一项了。
下面就总结一下两种连接方式的属性参数设置问题:
(参考:http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/002q00000039000000/)
1、直接连接SQL Server地理数据库
- 服务器: SQL Server 数据库所在的服务器的名称。(可不设置)
-
服务: sde:sqlserver:<SQL
服务器实例名称>。
- 如果想要连接到 SQL Server 的默认实例,则实例名称必须与服务器名称相同。
- 如果想要连接到 SQL Server 的已命名实例,则 SQL Server 的实例名称为 <服务器名称>\<实例>。
- 此外,您可以指定 SQL Server 实例监听连接所使用的端口号。在这种情况下,可在端口号前面指定服务器名称,例如:sde:sqlserver:myserver,1433.
- 要连接的数据库的名称。
- 用户名和密码。
- 服务器,SQL Server 数据库所在的服务器的名称。
- 服务:要连接到的服务的名称或端口号。(如果使用名称,则客户端的操作系统服务文件中必须包含一个服务条目。)
- 要连接的数据库的名称。
- 用户名和密码。
从上对比可以看出,两种连接方式最大的区别在于服务属性的设置。
下面给出示例代码:
<span style="font-size:14px;"> private void ConnectSQL(bool directCon)
{
IPropertySet propertySet = new PropertySetClass();
if (directCon == true)//直接连接方式
{
propertySet.SetProperty("INSTANCE", "sde:sqlserver:SQLEXPRESS");
propertySet.SetProperty("USER", "user");
propertySet.SetProperty("PASSWORD", "password");
propertySet.SetProperty("DATABASE", "sde");
}
else//通过SDE方式连接
{
propertySet.SetProperty("SERVER", "SQLEXPRESS");//数据库服务器名
propertySet.SetProperty("INSTANCE", "5151");//SDE端口,默认是5151或者esri_sde
propertySet.SetProperty("USER", "user");
propertySet.SetProperty("PASSWORD", "password");
propertySet.SetProperty("DATABASE", "sde");
propertySet.SetProperty("VERSION", "SDE.DEFAULT"); //SDE版本,默认是SDE.DEFAULT
}
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspaceFactory pWSFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
IWorkspace workspace = pWSFactory.Open(propertySet, 0);
}</span>欢迎大家指正,如有引用,还望尊重本人辛苦劳作,请注明引用处!
在AE开发中,尝试连接SQL Server数据库时遇到错误-2147216127。经过排查,问题源于混淆了直接连接与SDE连接的属性参数设置。错误通常是由于系统路径未包含SDE连接DLLs的位置。文章详细比较了两种连接方式的属性参数,并提供了示例代码。
3405

被折叠的 条评论
为什么被折叠?



