现在的位置: 首页 > 综合 > 正文

基于AE的个人地理数据库(mdb格式)导入到企业级数据库(sde数据库中)中(C#)[原创]

2011年02月20日 ⁄ 综合 ⁄ 共 3888字 ⁄ 字号 评论关闭

  基于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 和作者:GIS云中鹤

 

抱歉!评论已关闭.