ArcSDE连接数据库问题

环境描述

在开发过程中使用的环境配置声明

  • ArcEngine 10.2
  • ArcSDE10.2
  • Visual Studio 2012
  • SQL Server 2012

问题描述

ArcEngine 连接sql server sde过程中 Arcsde was not running.
Markdown

解决方法

  • 通过连接sde文件

如果读者在数据库中创建SDE文件完成,则通过打开sde文件的形式,从sde数据库中获取数据!

连接代码如下:

            string connectionString = @"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog\Connection to PC-20170517EXJJ.sde";
            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
            IWorkspaceFactory2 workspaceFactory2 = (IWorkspaceFactory2)Activator.CreateInstance(factoryType);
            IWorkspace pworkspace = workspaceFactory2.OpenFromFile(connectionString, 1);
            IFeatureWorkspace pFeaWS = pworkspace as IFeatureWorkspace;
            IFeatureClass pFeatureClas = pFeaWS.OpenFeatureClass("sde.dbo.REGIONS ");
            IFeatureLayer pFLr = new FeatureLayerClass();
            pFLr.FeatureClass = pFeatureClas;
            axMapControl1.AddLayer(pFLr as ILayer);
实现的效果

Markdown

  • 第二种方式是通过数据库进行连接

链接的代码如下:

            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
            IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);

            IPropertySet propertySet = new PropertySetClass();
            propertySet.SetProperty("SERVER", "PC-20170517EXJJ");
            propertySet.SetProperty("SERVICE", "..");
            propertySet.SetProperty("DATABASE", "sde");
            propertySet.SetProperty("USER", "sde");
            propertySet.SetProperty("PASSWORD", "sde");
            propertySet.SetProperty("INSTANCE", "sde:sqlserver:..");
            //propertySet.SetProperty("VERSION", "sde.DEFAULT");
            propertySet.SetProperty("AUTHENTICATION_MODE", "DBMS");
            //Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
            IWorkspace workspace = workspaceFactory.Open(propertySet, 0);
            //MessageBox.Show("数据库连接成功");

            IEnumDataset enumDataSet = workspace.get_Datasets(esriDatasetType.esriDTAny);
            enumDataSet.Reset();

            IDataset dataSet;
            dataSet = enumDataSet.Next();

            while (dataSet != null)
            {
                if (dataSet is IFeatureDataset)
                {
                    IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
                    IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset(dataSet.Name);
                    IEnumDataset pEnumDataset1 = featureDataset.Subsets;
                    pEnumDataset1.Reset();
                    IDataset pDataset1 = pEnumDataset1.Next();

                    if (pDataset1 is IFeatureClass)
                    {
                        IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                        pFeatureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(pDataset1.Name);
                        pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
                        main_mapControl1.Map.AddLayer(pFeatureLayer);
                        main_mapControl1.ActiveView.Refresh();
                    }
                }
                else if (dataSet is IFeatureClass)
                {
                    IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
                    IFeatureClass feature = featureWorkspace.OpenFeatureClass(dataSet.Name);
                    IFeatureLayer layer = new FeatureLayerClass();
                    layer.FeatureClass = feature;
                    layer.Name = feature.AliasName;
                    main_mapControl1.AddLayer(layer);
                }
                dataSet = enumDataSet.Next();
            }
            main_mapControl1.Refresh();
            MessageBox.Show("数据读取完毕!");
            this.Close();
实现的效果

image

image

最后,我来说说

这个是经过千幸万苦找到的回复,答案和大家分享。
http://support.esri.com/technical-article/000011662

在GIS的沙场,分享有价值的东西!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值