AE连接SDE读取数据

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("数据读取完毕!");
              }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值