第一步:创建空数据库
打开SQL Server 2012,新建一个空的数据库,我这里命名为TestGDB
第二步:建立SDE数据库
打开ArcMap,在ArcToolbox中选择数据管理工具下的地理数据库管理,点击创建企业级地理数据库。
第三步:配置SDE相关信息
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文件作为授权文件。
7、点击确定即可。
第四步:导入数据
选择数据库连接下的添加数据库连接:
弹出如下界面,我这里的实例名还是设置为计算机名,用户名sa,密码就是登陆SQL Server的密码,数据库选择TestGDB,点击确定即可。
上述步骤完成后,就可以FileGDB那样导入数据了,这里我导入一个shp文件。
第五步:利用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();}}
}
结果如下: