2023年11月23日发(作者:)

AE中加载个⼈数据库MDB的三种⽅法.(转)

个⼈数据库MDB是保存在Access中的数据库。

A. 通过设置属性加载个⼈数据库.

public void AddAccessDBByPro()

{

IPropertySet Propset = new PropertySetClass();

perty("DATABASE",@"D:" );

IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();

IFeatureWorkspace Workspace = (Propset,0) as IFeatureWorkspace;

IFeatureClass Fcls = atureClass ("District");

IFeatureLayer Fly = new FeatureLayerClass();

eClass = Fcls;

er(Fly);

h();

}

⾸先通过IPropertySet接⼝定义要连接数据库的⼀些相关属性,在个⼈数据库中为数据库的路径,例如:

IPropertySet Propset = new PropertySetClass();

perty("DATABASE",@"D:" );

当定义完属性并设置属性后就可以进⾏打开数据库的操作了. IWorkspaceFactory是⼀个⽤于创建和打开⼯作空间的接⼝,

它是⼀个抽象的接⼝,我们在具体应⽤时要⽤对应的⼯作空间实例化它,如下:

IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();

如果我们打开的是SDE数据库就要⽤SdeWorkspaceFactoryClass实例化Fact。当我们完成了⼯作空间的实例化后就可以根据

上边设置的属性打开对应的Access数据库了。打开⽅式如下:

IFeatureWorkspace Workspace = (Propset,0) as IFeatureWorkspace;

打开Access⼯作空间后接下来的事情是做什么了,很简单,找到对应的地物类,赋给相应的层,通过MapControl控件添加对

应的层,然后刷新地图。

B. 通过数据库名字加载个⼈数据库.

public void AddAccessDBByName()

{

IWorkspaceName pWorkspaceName = new WorkspaceNameClass() ;

IFeatureLayer Fly = new FeatureLayerClass();

eClass = Fcls;

er (Fly);

h();

}

⾸先是创建⼀个个⼈数据库⼯作空间名,在指定⼯作空间名的ProgID,以确定打开的是什么类型的⼯作空间,例如在打开

Access个⼈数据库时使⽤的是下边的代码:

IWorkspaceName pWorkspaceName = new WorkspaceNameClass() ;

aceFactoryProgID = "WorkspaceFactory";

me = @"D:";

属性WorkspaceFactoryProgID可以确保⼯作空间是AccessWorkspaceFactory,即个⼈数据库,同时指定要打开数据库的路

径。为了打开数据库,我们通过AE的类图可以发现打开⼯作空间必须使⽤IName接⼝. 所以接着定义IName对象,并把⼯作空

间名转换成IName类型并赋值给IName对象,然后通过IName对象的Open()⽅法打开相应的⼯作空间,代码如下:

IName n = pWorkspaceName as IName ;

IFeatureWorkspace Workspace = () as IFeatureWorkspace;

C. 直接⽤路径访问数据库.

public void AddAccessDBByName()

{

IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactoryClass();

IWorkspace pWorkspace = omFile(pPath, 0);

IRasterWorkspaceEx pRasterWorkspaceEx = pWorkspace as IRasterWorkspaceEx;

IRasterDataset pRasterDataset = sterDataset(pName);

IRasterLayer pRasterLayer = new RasterLayerClass();

FromDataset(pRasterDataset);

= pName;

er(pRasterLayer, ount);

}