您的位置:首页 > 数据库 > Oracle

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: