使用OLEDB连接Oracle数据库无法获取对象属性的原因
2005-03-14 09:20
471 查看
出于效率及编程便利性考虑(CAD Client的连接速度实在是有点慢),在查询对象属性数据时往往是使用OLEDB直接连接Oracle进行相关查询的。然而,使用中发现偶尔会出现无法获取对象属性的问题。经分析,发现问题出在版本功能上。
SDE提供了版本管理功能,用户可以很方便的进行图形的审批、回滚等操作。然而,此功能在Oracle中需要其它表的辅助,主要包括了A表和D表。ArcSDE建立了版本后,关于表空间数据的增加、修改均通过相应的A表和D表实现。由于直接使用OLEDB在访问时只查询到没有修改的版本基表,因而无法检索到创建版本之后新增加或者修改的对象的信息。
有关版本的具体机制可参见:
http://gis.esri.com/library/userconf/proc01/professional/papers/pap232/p232.htm
解决该问题的有两类方案:修改系统查询机制,或者是在Oracle中建立相关的视图。
若采用修改系统的方法,考虑到SDE CAD Client效率较低,则应考虑采用SDE提供的C API重写相关代码,相对修改较大。
若采用建立视图的方法,则可使用指令sdetable,把操作定为create_mv_view,即可针对指定的表建立相应的视图,并把相关的权限赋予对应的Oracle帐号即可。但每个注册为版本的要素类都需要建立对应的视图才可以避免上述问题产生。
以下简单列一下几个解决方案的优缺点。
SDE提供了版本管理功能,用户可以很方便的进行图形的审批、回滚等操作。然而,此功能在Oracle中需要其它表的辅助,主要包括了A表和D表。ArcSDE建立了版本后,关于表空间数据的增加、修改均通过相应的A表和D表实现。由于直接使用OLEDB在访问时只查询到没有修改的版本基表,因而无法检索到创建版本之后新增加或者修改的对象的信息。
有关版本的具体机制可参见:
http://gis.esri.com/library/userconf/proc01/professional/papers/pap232/p232.htm
解决该问题的有两类方案:修改系统查询机制,或者是在Oracle中建立相关的视图。
若采用修改系统的方法,考虑到SDE CAD Client效率较低,则应考虑采用SDE提供的C API重写相关代码,相对修改较大。
若采用建立视图的方法,则可使用指令sdetable,把操作定为create_mv_view,即可针对指定的表建立相应的视图,并把相关的权限赋予对应的Oracle帐号即可。但每个注册为版本的要素类都需要建立对应的视图才可以避免上述问题产生。
以下简单列一下几个解决方案的优缺点。
CAD Client | C API | OLEDB | |
查询速度 | 慢 | 快 | 快 |
是否需开发代码 | 是 | 是 | 否 |
自适应性 | 好 | 好 | 差 |
修复此问题时间 | 慢 | 慢 | 快 |
相关文章推荐
- TerraExplorer 6.6 api for javaScript 中的Points无法获取该对象的属性和使用其所持有方法
- C#(ASP.NET)错误: 无法获取属性“0”的值: 对象为 null 或未定义 关键字 'user' 附近有语法错误。
- ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法(转载)
- json对象,使用 “ . ”获取值是,不能使用变量作为属性名。
- SCRIPT5007: 无法获取属性“rowspan”的值: 对象为 null 或未定义
- 使用Hibernate条件查询时,无法识别对象属性
- 遍历json对象的所有key,在使用json对象时,如果无法知道key,怎么通过key变量来获取值
- 编写一个JSP文件,使用pageContext内置对象来获取由session、request和application内置对象设置的属性。
- 在datagrid中,IE浏览器报错:SCRIPT5007: 无法获取属性“rowspan”的值: 对象为 null 或未定义
- 关于使用tomcat自带连接池xapool偶尔无法获取数据库连接的问题(报空指针)
- IE jquery easyui datagrid error的无法获取属性“rowspan”的值: 对象为 null 或未定义
- sql2000备份的数据库还原到sql2005后,选择“数据库关系图”提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使用“数据库属性”对话框的“文件”页或 Alter AUTHORIZATION 语句将数据库
- 在JavaScript中使用document.getElementById()获取对象失败的原因
- 使用表达式树访问对象、类型及成员(下):获取对象和属性的值
- 在datagrid中,IE浏览器报错:SCRIPT5007: 无法获取属性“rowspan”的值: 对象为 null 或未定义
- echarts 无法获取属性“getAttribute”的值: 对象为 null 或未定义 错误解决方法
- 在VB6中,使用ADO对象模型时,ADO对象、属性、方法不“无法显示帮助”的问题?
- (转帖)关于easyui中的datagrid在加载数据时候报错:无法获取属性"Length"的值,对象为null或未定义
- 使用MyEclipse中用Hibernate反向工程生成的DAO会发生对象无法存储到数据库的现象,原因是没有运用事务。
- 使用ObjectUtil进行深度复制及获取对象的属性名称列表