//此处用的workspace来源与用户选择
IWorkspace workspace = null; //workspace一般等同于数据库 //工作空间类型,也可理解为数据库类型
//esriFileSystemWorkspace:可能为shp
//esriLocalDatabaseWorkspace:可能为file gdb,mdb
//esriRemoteDatabaseWorkspace:可能为sde
esriWorkspaceType workspaceType = workspace.Type; //路径,对于本地文件类型的(例如shp,file gdb,mdb)有意义,就是他们的文件路径
string path = workspace.PathName; //数据库连接配置,通常对于sde有效
IPropertySet propertySet = workspace.ConnectionProperties;
//以下是遍历他的值的代码
object objNames = null;
object objValue = null;
//获取所有值,结构是类似字段的key/value格式,参数1是name的数组,参数2是value的数组
//参数类型是object,但实际分别是string数组和object数组
propertySet.GetAllProperties(out objNames, out objValue);
string[] names = (string[])objNames;
object[] values = (object[])objValue;
//遍历获取各个值
for (int i = ; i < names.Length; i++)
{
//参数名
string name = names[i];
//参数值
string value = values[i].ToString();
} //以下代码由于不具备测试数据,只看代码不运行
if ( == )
{
//执行原生sql
//如果Workspace数据类型是数据库如sde,可以通过此方法执行原生sql
//这里只能执行不返回结果的sql,例如insert,update等,而不能select
workspace.ExecuteSQL("update xxx set eee=111");
} //PS:以上代码可以获取sde数据库的配置,但密码获取到的是乱码,因为想在ae获取sde完整的连接参数(通常用于再次新建对sde的连接)是不可能的 //遍历workspace下所有的数据集
//get_Datasets方法用于获取workspace下的成员,参数1是获取的数据类型
//IEnum开头的接口类似于游标,用于遍历一些查询结果
IEnumDataset enumDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
enumDataset.Reset();
//因为下面还要遍历数据集下的featureClass,因此用了IFeatureDataset,其实也可以as到IDataset
IFeatureDataset featureDataset = null;
while ((featureDataset = enumDataset.Next() as IFeatureDataset) != null)
{
//数据集的基础属性 IDataset dataset = featureDataset as IDataset;
//数据集名称
string datasetName = dataset.Name;
//数据集类型
esriDatasetType datasetType = dataset.Type; //IGeoDataset是几何相关的接口
IGeoDataset geoDataset = featureDataset as IGeoDataset;
//空间参考
ISpatialReference spatialReference2 = geoDataset.SpatialReference; //获取数据集下所有的featureClass IFeatureClassContainer featureClassContainer = featureDataset as IFeatureClassContainer;
IEnumFeatureClass enumFeatureClass = featureClassContainer.Classes;
enumFeatureClass.Reset();
IFeatureClass featureClass = null;
//遍历数据集里的要素类
while ((featureClass = enumFeatureClass.Next()) != null)
{ }
//IEnum开头的接口用完都要手动释放(与游标一样)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(enumFeatureClass);
}
//IEnum开头的接口用完都要手动释放(与游标一样)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(enumDataset); //遍历workspace下的featureClass
//PS:结合上面的代码可以注意到,获取数据集下的featureClass和获取workspace下的featureClass的代码是分开的 enumDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
enumDataset.Reset();
IFeatureClass featureClass2 = enumDataset.Next() as IFeatureClass;
while ((featureClass2 = enumDataset.Next() as IFeatureClass) != null)
{ }
//IEnum开头的接口用完都要手动释放(与游标一样)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(enumDataset); //获取Workspace的所有FeatureClass(包括Dataset里面的)
List<IFeatureClass> lstFeatureClass = WorkspaceEdmHelper.GetAllFeatureClassInWorkspace(workspace as IFeatureWorkspace); //Workspace关于featureClass操作的接口
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
//以下代码由于不具备测试数据,只看代码不运行
if ( == )
{
//通过名称获取featureClass
//PS:即使featureClass在数据集下也可以这样获取,这点跟遍历不同
featureClass2 = featureWorkspace.OpenFeatureClass("www"); //通过名称获取数据集
featureDataset = featureWorkspace.OpenFeatureDataset("rrr"); //通过文件路径或数据库连接参数,新建数据库或打开数据库 //创建File Gdb,参数1是文件所在文件夹,参数2是数据库名称
//由于一个file gdb数据库等同于一个workspace,因此创建file gdb等同于创建workspace
featureWorkspace = WorkspaceEdmHelper.CreateFileGdb("C:\\aaa", "test.gdb"); //创建personal gdb(mdb),参数1是文件所在文件夹,参数2是数据库名称
featureWorkspace = WorkspaceEdmHelper.CreatePersonalGdb("C:\\aaa", "test.mdb");
}

Arcgis Engine(ae)接口详解(6):workspace操作的更多相关文章

  1. JDBC常用接口详解

    JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...

  2. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  3. socket接口详解

    1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...

  4. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第八十三章:内部类与接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...

  7. [转载]MII/MDIO接口详解

    原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...

  8. map接口详解

    1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...

  9. ReadWriteLock 接口详解

    ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); 只要没有写锁,读锁可 ...

  10. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

随机推荐

  1. windows phone 网络开发三部曲(一)各种包的各种抓法

    首先感谢大家对我上一篇博客的支持,让我也体验了一把上榜的感觉. 这无疑是对我这个刚刚打算,认真写写博客的人的莫大的鼓励,再次感谢(鞠躬)!! 接下来想和大家分享一些关于windows phone网络开 ...

  2. ZingChart 图表插件

    ZingChart提供了一个丰富的API,用于通过重新绘制绘图(重新加载) ,加载新数据(setseriesdata),修改现有图表(modifyplot), 放大数据范围(zoomto),切换各种交 ...

  3. 九度oj 题目1125:大整数的因子

    题目描述: 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入: 若干个非负整数c,c的位数<=30每行一个c,当c=-1时中止 ( ...

  4. DataTable排序

    DataRow[] rows = dt.Select("", "name asc");   DataTable t = dt.Clone();   t.Clea ...

  5. Android圆弧背景

    代码改变世界 Android圆弧背景 <?xml version="1.0" encoding="utf-8"?><shape xmlns:a ...

  6. [UOJ#130][BZOJ4198][Noi2015]荷马史诗

    [UOJ#130][BZOJ4198][Noi2015]荷马史诗 试题描述 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静 ...

  7. yum update 出错解决办法

    卸载掉yum和python 于是我卸载了python和yum,觉得自己重新安装python和yum. 步骤1:卸载python rpm -qa|grep python|xargs rpm -e --a ...

  8. POJ1635 树的最小表示法(判断同构)

    Some major cities have subway systems in the form of a tree, i.e. between any pair of stations, ther ...

  9. Vmware error:无法获得 VMCI 驱动程序的版本: 句柄无效。

    error:无法获得 VMCI 驱动程序的版本: 句柄无效.驱动程序“vmci.sys”的版本不正确.请尝试重新安装 VMware Workstation.开启模块 DevicePowerOn 的操作 ...

  10. 巴蜀2904 MMT数

    Description FF博士最近在研究MMT数. 如果对于一个数n,存在gcd(n,x)<>1并且n mod x<>0 那么x叫做n的MMT数,显然这样的数可以有无限个. ...