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的沙場,分享有價值的東西!

發佈了48 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章