private void 连接数据库ToolStripMenuItem_Click(object sender, EventArgs e)
{
//定义工作空间,工作空间的数据源来自SDE,IWorkspaceFactory是Geodatabase的入口
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
//通过IPropertySet设置通过SDE连接数据库的各种参数
IPropertySet propertySet = new PropertySetClass();
propertySet.SetProperty("SERVER", "sgisyfb-svr");
propertySet.SetProperty("SERVICE", "esri_sde");
propertySet.SetProperty("USER", "sde");
propertySet.SetProperty("PASSWORD", "000000");
propertySet.SetProperty("VERSION", "sde.DEFAULT");
//通过以上设置的参数将数据库的数据通过SDE读入工作空间
IWorkspace workspace
= workspaceFactory.Open(propertySet, 0);
MessageBox.Show("数据库连接成功!");
//将工作空间中的所有数据存入Enum数据集,这些数据中可能有FeatureDataSet、FeatureClass等多种数据类型
IEnumDataset enumDataSet = workspace.get_Datasets(esriDatasetType.esriDTAny);
enumDataSet.Reset();
//再把Enum数据集中的数据一个个读到DataSet中
IDataset dataSet;
dataSet = enumDataSet.Next();
//判断数据集是否有数据
while(dataSet!=null)
{
//判断数据集中的数据是什么类型
if(dataSet is IFeatureDataset)
{
//如果是FeatureDataSet做以下处理
IFeatureWorkspace
featureWorkspace = workspace as IFeatureWorkspace;
IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset(dataSet.Name);
IEnumDataset pEnumDataset1 = featureDataset.Subsets;
pEnumDataset1.Reset();
IDataset pDataset1 = pEnumDataset1.Next();
if (pDataset1 is IFeatureClass)
{
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(pDataset1.Name);
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
axMapControl1.Map.AddLayer(pFeatureLayer);
axMapControl1.ActiveView.Refresh();
}
}
else if(dataSet is IFeatureClass)
{
//如果是FeatureClass做以下处理
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
IFeatureClass feature = featureWorkspace.OpenFeatureClass(dataSet.Name);
IFeatureLayer layer = new FeatureLayerClass();
layer.FeatureClass = feature;
layer.Name = feature.AliasName;
axMapControl1.AddLayer(layer);
}
dataSet = enumDataSet.Next();
}
axMapControl1.Refresh();
MessageBox.Show("数据读取完毕!");
}
AE连接SDE读取数据
最新推荐文章于 2023-08-22 11:57:17 发布