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

来源:互联网 发布:win8无法运行软件 编辑:程序博客网 时间:2024/05/29 17:42
       #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

0 0