第一步:创建空数据库
打开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();
}
}
}
结果如下: