AE将mdb空间数据导入SDE

时间:2013-10-23    作者:悬浮的青春    分类: gis二次开发


基于AE的个人地理数据库(mdb格式)导入到企业级数据库(sde数据库中,采用Oracle数据库)中(C#).
个人地理数据库有数据集,导入到企业级数据库后没有数据集,只有要素类。
private void btnPGD2EGD_Click(object sender, EventArgs e)
       {
           try
           {
               string pWorkspaceName = strName;
               string sdeUser = pSDEwsp.ConnectionProperties.GetProperty("USER").ToString();
               IWorkspaceFactory pMDBwspf = new AccessWorkspaceFactoryClass();
               pMDBwsp = pMDBwspf.OpenFromFile(pWorkspaceName, 0);
               Cursor = Cursors.WaitCursor;
               if (pSDEwsp != null)
               {
                   //progressBar.Visible = true;
                    DataVonverter(ref pMDBwsp, ref pSDEwsp, sdeUser);//数据导入
                   progressBar.Visible = false;
               }

               Cursor = Cursors.Default;
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }

           MessageBox.Show("mdb数据上传SDE库成功!", "数据导入", MessageBoxButtons.OK, MessageBoxIcon.Information);
           this.Close();
           
       }

 public void DataVonverter(ref IWorkspace FromWorkspace, ref IWorkspace ToWorkspace,string SDEUser)
       {
           if (SDEUser == "") return;
           IFeatureWorkspace pOutFeatureWorkspace;
           IFeatureWorkspace pInFeatureWorkspace;
           IFeatureClass pFeatureClass;
           IFeatureClass pOutFeatureClass;
           IWorkspace2 pWorkspace2;
           IEnumDataset pEnumDataset;
           IDataset pOutDataset;

           IFeatureDataset pOutFeatureDataset;
           IEnumFeatureClass pEnumFeatureClass;
           IFeatureClassContainer pFeatureclassContainer;

           pOutFeatureWorkspace = (IFeatureWorkspace)ToWorkspace;
           pInFeatureWorkspace = (IFeatureWorkspace)FromWorkspace;
           pWorkspace2 = (IWorkspace2)ToWorkspace;

           pEnumDataset = (IEnumDataset)FromWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);//获得MDB端的所有数据集
           pOutDataset = (IDataset)pEnumDataset.Next();

           while (pOutDataset != null)//遍历数据集
           {
               pOutFeatureDataset = (IFeatureDataset)pOutDataset;
               if (pOutFeatureDataset != null)
               {
                   pFeatureclassContainer = (IFeatureClassContainer)pOutFeatureDataset;
                   pEnumFeatureClass = (IEnumFeatureClass)pFeatureclassContainer.Classes;
                   pFeatureClass = (IFeatureClass)pEnumFeatureClass.Next();
                   while (pFeatureClass != null)//在每一个数据集中遍历数据层IFeatureClass
                   {
                       if (!pFeatureClass.AliasName.Contains("UnClassfied"))
                       {
                           if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, SDEUser + "." + pFeatureClass.AliasName))
                           {
                               pOutFeatureClass = pOutFeatureWorkspace.OpenFeatureClass(SDEUser + "." + pFeatureClass.AliasName);
                               fc2fc(ref pFeatureClass, ref pOutFeatureClass);
                           }
                           else
                           {
                               fc2fc(ref pFeatureClass, ref ToWorkspace);
                           }
                       }
                       pFeatureClass = (IFeatureClass)pEnumFeatureClass.Next();
                   }
               }
               pOutDataset = (IDataset)pEnumDataset.Next();
           }

           ITable pInTable;
           pInTable = pInFeatureWorkspace.OpenTable("AIndexInfo");
           //如果SDE数据库中已经有AIndexInfo表,则将新的记录追加进去
           if (pWorkspace2.get_NameExists(esriDatasetType.esriDTTable, SDEUser + "." + "AIndexInfo"))
           {
               ITable pOutTable = pOutFeatureWorkspace.OpenTable("AIndexInfo");
               FusedIndexTable(ref pInTable, ref pOutTable);
           }
           else//如果SDE数据库中没有AIndexInfo表,则重新生成和来源端一样的AIndexInfo表
           {
               FusedIndexTable(ref pInTable, ref ToWorkspace);
           }
       }

转载出处:http://www.cnblogs.com/njlhb/archive/2007/06/17/786242.html

标签: arcgis

WRITTEN BY

avatar