MDB,Oracle空间数据库访问及图层数据的处理
2015-09-25 11:23
561 查看
#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
相关文章推荐
- DataConvert,实现MDB到Oracle属性、空间数据的插入
- Oracle 调优经典案例
- 局域网内远程连接Oracle
- Oracle实现对查询结果每N条再次分组
- Oracle归档日志删除
- 查看Oracle SQL执行计划的常用方式
- oracle时间格式字符串转化为时间
- oracle数据库触发器(trigger)用法总结
- mssql数据库表转为oracle ,mysql数据库的建表语句。
- oracle 11g监听图形界面启动不了
- PLSQL连接Oracle出现弹出空白框的原因,tnsnames.ora也不可修改,没有找到主机
- oracle测试题(持续更新)
- Oracle的Opatch升级 11.2.0.4.0 到 11.2.0.4.7
- oracle的索引
- oracle的索引
- oracle的索引
- ORACLE常用
- oracle 两次购买时间间隔
- 如何解决Oracle EBS R12 - 以Excel查看输出格式为“文本”的请求时乱码
- Oracle 分析表