什么是SDE数据库?这个问题要详细地讲解将花费大量的时间,但我可以告诉你SDE数据数据库可以是任何关系数据库。ESRI公司为了使空间数据能保存在关系数据库中,并且能很好的查询相关的空间属性而开发的一个中间件,使用SDE能很好的将空间数据保存在关系数据库中。如Orcale SQL Server 等。SDE具体细节的了解请查找相关的资料,这里只介绍怎么连接SDE数据库。SDE数据库的联机分为直接连接和通过SDE连接。当服务器的性能比较好的时候可以采用SDE连接,否则采用直接连接,这样可以减轻服务器的任务。建议采用直接连接,其实,SDE连接方式和直接连接的方式只是一个属性参数设置的问题。跟个人数据库采用属性连接的方式一样,先定义一个属性对象,然后设置属性参数,接着定义一个工作空间并用SdeWorkspaceFactoryClass()实例化它,接着加在加载图层,至于加载图层的代码,与加载个人数据库中图层的方法一样,其实不只加载这两种数据类型,加载其他类型的数据时也是采用相同的方法加载图层,只是工作空间采用不同的实例而已,下边为完整的示例代码:
public void AddSDELayer(bool ChkSdeLinkModle)
{
//定义一个属性
IPropertySet Propset = new PropertySetClass();
if (ChkSdeLinkModle==true) // 采用SDE连接
{
//设置数据库服务器名
Propset.SetProperty ("SERVER", "zhpzh");
//设置SDE的端口,这是安装时指定的,默认安装时"port:5151"
Propset.SetProperty ("INSTANCE", "port:5151");
//SDE的用户名
Propset.SetProperty ("USER", "sa");
//密码
Propset.SetProperty ("PASSWORD", "sa");
//设置数据库的名字,只有SQL Server Informix 数据库才需要设置
Propset.SetProperty ("DATABASE", "sde");
//SDE的版本,在这为默认版本
Propset.SetProperty ("VERSION", "SDE.DEFAULT");
}
else // 直接连接
{
//设置数据库服务器名,如果是本机可以用"sde:sqlserver:."
Propset.SetProperty ("INSTANCE", "sde:sqlserver:zhpzh");
}
IWorkSpaceFactory pWkSpFac = new SdeWorkspaceFactory();
IWorkSpace pWkSpace = pWkSpFac.open(Propset,0);
Set pWorkspaceFactory = New SdeWorkspaceFactory
Set pPropSet = New PropertySet
With pPropSet '设置ArcSDE连接属性
.SetProperty "SERVER", Server
.SetProperty "INSTANCE", Instance
.SetProperty "USER", User
.SetProperty "PASSWORD", Password
.SetProperty "VERSION", version '可选,缺省为SDE.DEFAULT版本
End With
Set pWorkspace = pWorkspaceFactory.Open(pPropSet, 0)
Set pClass = pWorkspace.OpenFeatureClass(featureClass)
Set pLayer = New FeatureLayer
Set pLayer.featureClass = pClass
pLayer.Name = pClass.AliasName
Set pMxDoc = ThisDocument
pMxDoc.AddLayer pLayer
pMxDoc.ActiveView.PartialRefresh esriViewGeography, pLayer, Noting