MDB,Oracle空间数据库访问及图层数据的处理

       #region 取得ForeStar.Data.General 工作空间 mdb或zdb
        /// <summary>
        /// 取得ForeStar.Data.General 工作空间 mdb或zdb
        /// </summary>
        /// <param name="strFileName"></param>
        /// <param name="pTyep"></param>
        /// <returns></returns>
        private static IWorkspace GetAdoWorkspace(string strFileName, WorkspaceType pTyep)
        {
            IWorkspaceFactory pWorkspaceFactory = ContextRegistry.GetContext().GetObject("WorkspaceFactory_ADO")
                 as IWorkspaceFactory;
            ConnectionInfo pcon = new ConnectionInfo();
            pcon.Database = strFileName;
            pcon.WorkspaceType = pTyep;
            IWorkspace pWorkspace = pWorkspaceFactory.OpenWorkspace(pcon);
            return pWorkspace;
        }
        
        #endregion

        #region 创建临时MDB文件
        private static bool CreateEmptyMDB(string strMdbPath)
        {
            //在此处为临时mdb文件命名
            strTempMdbName = Guid.NewGuid().ToString() + ".mdb";
            if (string.IsNullOrEmpty(strMdbPath))
            {
                MessageManager.Show("路径为空,不能创建数据源。", "系统提示");
                return false;
            }
            if (System.IO.File.Exists(strMdbPath))
            {
                if (MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Warning, "指定定路径下已存在工程文件,是否覆盖?", "系统提示", MessageButton.YesNo) == MessageResult.No)
                {
                    return false;
                }
            }
            try
            {
                ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWsF = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
                ESRI.ArcGIS.Geodatabase.IWorkspaceName pWorkspaceName = pWsF.Create(strMdbPath, strTempMdbName, null, 0);
                return true;
            }
            catch (Exception ex)
            {
                ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "创建目标数据库失败!原因:\r\n" + ex.ToString(), "系统提示");
                return false;
            }
            //finally
            //{
 
            //}
        } 
        #endregion

        #region 取得 ESRI.ArcGIS.Geodatabase.IWorkspace mdb工作空间
        /// <summary>
        /// 取得 ESRI.ArcGIS.Geodatabase.IWorkspace mdb工作空间
        /// </summary>
        /// <returns></returns>
        private static ESRI.ArcGIS.Geodatabase.IWorkspace GetMdbWorkspace(string mdbPath)
        {
            ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pFactory = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
            ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = null;
            if (mdbPath != null)
            {
                pWorkspace = pFactory.OpenFromFile(mdbPath, 0);
            }
            return pWorkspace;
        } 
        #endregion



        #region 返回IPropertySet对象
        /// <summary>
        /// 返回IPropertySet对象
        /// </summary>
        /// <param name="_pServerIP"></param>
        /// <param name="_pInstance"></param>
        /// <param name="_pUser"></param>
        /// <param name="_pPassword"></param>
        /// <param name="_pVersion"></param>
        /// <param name="_pDatabase"></param>
        /// <param name="_pTrue"></param>
        /// <returns></returns>
        public static ESRI.ArcGIS.esriSystem.IPropertySet GetPropertySet(String _pServerIP, String _pInstance, String _pUser, String _pPassword, String _pVersion, string _pDatabase, bool _pTrue)
        {
            ESRI.ArcGIS.esriSystem.IPropertySet pPropertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass();
            if (_pTrue)
            {
                pPropertySet.SetProperty("SERVER", _pServerIP);
                pPropertySet.SetProperty("INSTANCE", "sde:oracle11g:" + _pInstance);
                pPropertySet.SetProperty("USER", _pUser);
                pPropertySet.SetProperty("PASSWORD", _pPassword);
                pPropertySet.SetProperty("DATABASE", _pDatabase);
                pPropertySet.SetProperty("VERSION", _pVersion);
            }
            else
            {

            }
            return pPropertySet;
        }
        #endregion

        #region 取得 ESRI.ArcGIS.Geodatabase.IWorkspace oracle工作空间
        /// <summary>
        /// 取得 ESRI.ArcGIS.Geodatabase.IWorkspace oracle工作空间
        /// </summary>
        /// <returns></returns>
        public static ESRI.ArcGIS.Geodatabase.IWorkspace GetOracleWorkspace(ESRI.ArcGIS.esriSystem.IPropertySet pPropertySet)
        {
            ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass();
            gisWorkspace = workspaceFactory.Open(pPropertySet, 0);
            return gisWorkspace;
        } 
        #endregion

        #region 判断图层在oracle数据库中是否存在
        /// <summary>
        /// 判断某图层在数据库中是否存在
        /// </summary>
        /// <param name="layerName"></param>
        /// <param name="conn"></param>
        /// <returns></returns>
        public static bool IsExistLayer(ESRI.ArcGIS.Geodatabase.IWorkspace pWs,string layerName )
        {
            bool IsExist = false;
            ESRI.ArcGIS.Geodatabase.IEnumDataset pEDataset = pWs.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);

            ESRI.ArcGIS.Geodatabase.IDataset pDataset = pEDataset.Next();
            while (pDataset != null)
            {
                if (pDataset.Type == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass)
                {
                    strLayerName.Add(pDataset.Name);
                }
                //如果是数据集 
                else if (pDataset.Type == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureDataset)
                {
                    ESRI.ArcGIS.Geodatabase.IEnumDataset pESubDataset = pDataset.Subsets;
                    ESRI.ArcGIS.Geodatabase.IDataset pSubDataset = pESubDataset.Next();
                    while (pSubDataset != null)
                    {
                        strLayerName.Add(pSubDataset.Name);
                        pSubDataset = pESubDataset.Next();
                    }
                }
                pDataset = pEDataset.Next();
            }
            foreach (string lyrName in strLayerName)
            {
                if (lyrName == layerName)
                {
                    IsExist = true;
                    break;
                }
            }
            return IsExist;
        }
        #endregion

        #region 删除oracle数据库中指定图层的记录
        private void DelTableRecords(ESRI.ArcGIS.Geodatabase.IWorkspace pOracleWs, string LayerName, ESRI.ArcGIS.Geodatabase.IQueryFilter pFilter)
        {
            ESRI.ArcGIS.Geodatabase.IFeatureWorkspace pOracleFWs = pOracleWs as ESRI.ArcGIS.Geodatabase.IFeatureWorkspace;
            ESRI.ArcGIS.Geodatabase.ITable pOracleTable = pOracleFWs.OpenTable(LayerName);

            ESRI.ArcGIS.Geodatabase.IWorkspaceEdit workSpaceEdit = pOracleWs as ESRI.ArcGIS.Geodatabase.IWorkspaceEdit;
            workSpaceEdit.StartEditing(false);
            workSpaceEdit.StartEditOperation();
            pOracleTable.DeleteSearchedRows(pFilter);
            workSpaceEdit.StopEditing(true);
            workSpaceEdit.StopEditOperation();
        } 
        #endregion

        #region 删除IWorkspace中某图层
        /// <summary>
        /// 删除IWorkspace中某图层
        /// </summary>
        /// <param name="FcName"></param>
        public void DeleFeatureClass(ESRI.ArcGIS.Geodatabase.IWorkspace pWs, string FcName)
        {
            ESRI.ArcGIS.Geodatabase.IFeatureWorkspace pFWs = pWs as ESRI.ArcGIS.Geodatabase.IFeatureWorkspace;
            ESRI.ArcGIS.Geodatabase.IFeatureClass pFClass = pFWs.OpenFeatureClass(FcName);
            ESRI.ArcGIS.Geodatabase.IDataset pDatset = pFClass as ESRI.ArcGIS.Geodatabase.IDataset;
            pDatset.Delete();
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值