采用ArcSDE直连的方式,怎样在SQL Server管理器查看基表、索引表?

  • 问题

  1. 我没有安装ArcSDE,那么导入的数据怎样在数据库中存储的呢?为什么没有那么基表(p)、索引表(s)?
  2. 编程连接数据库时总会打开系统默认的数据库连接界面,有没有方法使它不打开,直接通过程序写?(这一点是老师的实验要求,虽然觉得没有必要)


1.png

 
  • 实验环境

  1. VMware 11.0下的Win7 64位旗舰版
  2. ArcGIS for Desktop 10.4 
  3.  Visual Studio Community 2015 with update 3 
  4. SQL Server Evaluation 2012 SP2

 
  • 实验过程

  1. 启动数据库服务,并在SMSS中新建数据库
  2. 通过ArcCatlog添加数据库连接
  3.  导入数据
  4. 在已有axMapControl1基础上编程
  5. private void 连接数据库ToolStripMenuItem_Click(object sender, EventArgs e){//定义工作空间,工作空间的数据源来自SDE,IWorkspaceFactory是Geodatabase的入口Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);/*注意添加using ESRI.ArcGIS.Geometry,并将互操作类型改为False*/IPropertySet Propset = new PropertySetClass();/*注意添加using ESRI.ArcGIS.esriSystem;*/Propset.SetProperty("INSTANCE", "sde:sqlserver:WIN-7U71IC5IC5U");/*WIN-7U71IC5IC5U是我的主机名,具体与SQL Server安装时有关*/IWorkspace workspace = workspaceFactory.Open(Propset, 0);//将工作空间中的所有数据存入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("数据读取完毕!");}

已邀请:

要回复问题请先登录注册