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

最近在ArcGIS Engine开发中关于调用gp工具过程出现COM 组件的调用返回了错误 HRESULT E_FAIL 错误的解决方法 和 学习oracle中遇到的一些问题总结

2014-05-14 10:36 1251 查看
首先说下AE开发中关于gp这一块的东西,gp是一个很方便的工具,利用gp可以在代码中实现ArcMap工具箱中的大部分内容,关于gp工具的使用我就不说了,这些大部分都可以在网上找到,我要说的是gp使用过程中遇到的问题:一般gp的报错为 对 COM 组件的调用返回了错误 HRESULT E_FAIL。如下图遇到这样的问题的可能原因目前我所知道有三个:1、参数缺少或者参数类型不正确,这是最容易解决的,改变正确的参数类型即可;2、参数路径不正确,或者gp的overwrite属性未设置,例如一个不存在的路径或者该路径下已有同名文件,这个问题就需要设置overwrite属性为true;3、重点来了,排除以上两个错误的情况下还是出现了这种问题,很多人估计就束手无策了,我查阅了很多资料,最后发现是gp使用的某些工具必须需要足够的权限来执行,一般我们axlicenseconrol控件默认的是arcgisengine权限,如下图我们在使用gp的某些功能,例如我使用的ESRI.ArcGIS.AnalysisTools.Erase这个工具,这个权限就不够了因此报出了上面的错误,那么怎么解决呢,很简单,勾选权限最大的ArcInfo(10.1以上可能对应的advanced)即可,有时候我们需要使用扩展模块的功能的时候可以按需勾选右边的扩展,到此一般可以正常执行代码了,有时候可能这样还不能解决问题,就需要用代码来赋予权限相关代码如下:IAoInitialize m_AoInitialize = new AoInitializeClass();esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);//里面的esriLicenseProductCode后面的产品可以自己选择
 添加相关代码在主窗体的构造函数的InitializeComponent();前面即可
再说下关于昨天在oracle学习的分页问题,我不知道是不是版本的问题,在oracle11g中的分页代码
select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rownum>=6;
这句貌似在oracle9i中可以正确执行
但是在oracle11g中就不能执行了 只能返回列名
找来很多资料后来发现 原来是最后的那个where的rownum应该换成rn
想了一下原理 [code]select * from emp //是查询emp表
select a1.*,rownum rn from (select * from emp) a1 where rownum<=10 //对上面查询出来的表查询出rownum小于等于10的列
select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rownum>=6;本来意思是对查询出来的表查询出rownum小于10的列再进行一次查询查询出大于等于6的列 预期返回6到10 一共5行数据 但是返回的结果是空的
换成select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rn>=6; 正确执行
其实想想原理也很简单 我们可以先执行第二步的查询语句看看输出结果
[/code]
得到的是一张表,我们可以理解为内嵌视图,那么第三步就是对这张表查询 此时的rn代表的是这张表的一个列名,因此rn>=6就很容易理解了,假设这张表我们叫t表,那么第三步查询就相当于
select * from t where rn>=6;
是不是这样就很好理解为什么后面一个rownum应该改成rn;
笔者这里就想到了能不能第二步的查询里面的rownum也改成rn呢,测试了一下结果如下:
显示标识符无效,这里也很好理解 因为第一步查询出来的emp表是没有rownum这一列
这样就完美解决了分页的问题。
说点题外话,在java连接oracle数据库的时候有多种方式,我所知jdbc_odbc桥接和jdbc连接
对应的连接参数为
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//2.得到连接
Connection connection=DriverManager.getConnection("jdbc:odbc:testorcl","scott","tiger");
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//得到连接 jdbc:oracle:thin:@localhost:1521:orcl
Connection connection=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
在web项目和java项目中要分别引入对应的包 一般在oracle安装目录的jdbc目录有有对应的jar驱动包
在web项目中要导入到项目根目录的WEB-INFO的lib目录下
另外笔者是第一次在csdn发博文,好多配图在发布的过程中不见了 影响了大家阅读 希望大家多批评指正

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐