连接SDE数据库,错误代码:-2147216127

在AE开发中,尝试连接SQL Server数据库时遇到错误-2147216127。经过排查,问题源于混淆了直接连接与SDE连接的属性参数设置。错误通常是由于系统路径未包含SDE连接DLLs的位置。文章详细比较了两种连接方式的属性参数,并提供了示例代码。

本人刚开始接触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地理数据库

  1. 服务器: SQL Server 数据库所在的服务器的名称。(可不设置)
  2. 服务:  sde:sqlserver:<SQL 服务器实例名称>。
    • 如果想要连接到 SQL Server 的默认实例,则实例名称必须与服务器名称相同。
    • 如果想要连接到 SQL Server 的已命名实例,则 SQL Server 的实例名称为 <服务器名称>\<实例>。
    • 此外,您可以指定 SQL Server 实例监听连接所使用的端口号。在这种情况下,可在端口号前面指定服务器名称,例如:sde:sqlserver:myserver,1433.
  3. 要连接的数据库的名称。
  4. 用户名和密码。
2、通过ArcSDE连接SQL Server地理数据库

  1. 服务器,SQL Server 数据库所在的服务器的名称。
  2. 服务:要连接到的服务的名称或端口号。(如果使用名称,则客户端的操作系统服务文件中必须包含一个服务条目。)
  3. 要连接的数据库的名称。
  4. 用户名和密码。

从上对比可以看出,两种连接方式最大的区别在于服务属性的设置。

下面给出示例代码:

<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>

欢迎大家指正,如有引用,还望尊重本人辛苦劳作,请注明引用处!

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值