第一步:创建空数据库

打开SQL Server 2012,新建一个空的数据库,我这里命名为TestGDB

ArcEngine连接sde并读取数据_System

第二步:建立SDE数据库

打开ArcMap,在ArcToolbox中选择数据管理工具下的地理数据库管理,点击创建企业级地理数据库。

ArcEngine连接sde并读取数据_ArcEngine_02

第三步:配置SDE相关信息

ArcEngine连接sde并读取数据_System_03


1、数据库平台:选择SQL_Server。

2、实例:由于我是在自己电脑上连接,所以可以设置成自己的计算机名,如果是通过自己的电脑连接服务器上的 SDE,则需要设置为服务器的IP。

3、数据库:填写刚刚新建的空数据库的名称“TestGDB”。

4、数据库管理员密码:登录SQL Server时的密码。

5、地理数据库管理员密码:我设置成跟SQL Server登陆的密码一样。

6、授权文件:打开ArcGIS注册机,选择Server选项卡,Feature选择arcsdeserver,Version设置为102。(PS:我的是ArcMap10.2,所以是102)点击All按钮,将内容复制到txt文件里,另存为*.ecp文件。选择此*.ecp文件作为授权文件。

ArcEngine连接sde并读取数据_SDE_04


7、点击确定即可。

ArcEngine连接sde并读取数据_Server_05

第四步:导入数据

选择数据库连接下的添加数据库连接:

ArcEngine连接sde并读取数据_数据库_06


弹出如下界面,我这里的实例名还是设置为计算机名,用户名sa,密码就是登陆SQL Server的密码,数据库选择TestGDB,点击确定即可。

ArcEngine连接sde并读取数据_Server_07


上述步骤完成后,就可以FileGDB那样导入数据了,这里我导入一个shp文件。

ArcEngine连接sde并读取数据_SDE_08

第五步:利用C#代码读取SDE数据

新建一个WinForm工程,在Program.cs文件中加入如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;

namespace WindowsFormsApplication2
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
            IAoInitialize m_AoInitialize = new AoInitialize();
            m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

主窗体代码如下;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnLoadData_Click(object sender, EventArgs e)
        {
            // 连接参数
            IPropertySet pPropertySet = new PropertySet();
            pPropertySet.SetProperty("SERVER", "DSF-PC");
            pPropertySet.SetProperty("INSTANCE", "sde:sqlserver:DSF-PC");
            pPropertySet.SetProperty("DATABASE", "TestGDB");
            pPropertySet.SetProperty("USER", "sa");
            pPropertySet.SetProperty("PASSWORD", "123456");
            pPropertySet.SetProperty("VERSION", "sde.Default");

            // 工作空间
            IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactory();
            IWorkspace pWorkspace = pWorkspaceFactory.Open(pPropertySet, 0);

            // 获取数据集
            IEnumDataset pEnumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
            pEnumDataset.Reset();
            IDataset pDataset = pEnumDataset.Next();

            // 遍历数据集
            while (pDataset != null)
            {
                IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
                IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset.Name);
                IFeatureLayer pFeatureLayer = new FeatureLayer();
                pFeatureLayer.FeatureClass = pFeatureClass;
                pFeatureLayer.Name = pFeatureClass.AliasName;
                axMapControl1.AddLayer(pFeatureLayer, 0);
                pDataset = pEnumDataset.Next();
            }

            // 刷新视图
            axMapControl1.ActiveView.Refresh();
        }
    }
}

结果如下:

ArcEngine连接sde并读取数据_ArcEngine_09