我在oracle 9i的环境下开发了occi的应用,结果放到10g(10.2.0.3)服务器上运行不了(只装了windows 版的10g服务端),只好把所有依赖的9i的dll拷过去,结果连接occi报错:
Error while trying to retrieve text for error ORA-32101
到http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html下载一个即时客户端10g(10.2.0.3)
安装并设置instantclient(解压缩到C盘,设置path和TMS_ADMIN等环境变量),还是ORA-32101错误(而且导致原来其他基于ODBC访问oracle的应用也会报错了:internal error -
unable to initialize NLS during driver load.)
Google之,说要设置环境变量,添加ORACLE_HOME=c:/oracle/product/10.1.0/em_1,报错改变:ORA-12538: TNS:no such protocol adapter
再Google之,有高人提到:
10g的occi库对应不同的vc有不同的库文件(在http://www.oracle.com/technology/tech/oci/occi/occidownloads.html可下载vc8的库,在instantclient sdk包里有vc7,vc71的
库,oracle服务端安装后也有默认的oci的库),但我下在的10g(10.2.0.3) instantclient里面只有vc7,vc71的库,就是没有vc6的!!
如果直接用oracle 10g(10.2.0.3)服务端自带的occi库(在C:/oracle/product/10.1.0/db_1/OCI/lib/MSVC/),结果运行时
try{
env = Environment::createEnvironment (Environment::DEFAULT);
conn = env->createConnection (user, passwd, db);
}catch(SQLException ex)
{
errS = (ex.getMessage()).c_str();
errCode = ex.getErrorCode();
}
运行到这一句errS = ex.getMessage();会异常!这应该是由于10g occi用的string和vc6 的 string不兼容造成的。
改成errS = ex.getMessage().c_str();后可以看见获得的错误描述:
ORA-24960: 属性 OCI_ATTR_USERNAME 的长度大于最大允许长度 255
后来才发现10.1.0.5版本的10g的instantclient sdk才有支持vc6的库(10.2.0.3以后就没有了),用这个替换10.2.0.3的库,编译完成,再将instantclient里面的oci.dll及vc6
下面的oraocci10.dll放到执行文件的旁边,拷到10g服务器上运行OK(注意这时在9i上运行反而会异常的,应该是调用到9i的dll导致)。
解决方案二:
改用VS2003+10.2.0.3的库进行编译,也可以在10g(10.2.0.3) 服务器的电脑上运行,注意这时不要在10g上面再安装9i的客户端程序,要不然会有oci.dll的函数定位错误。
分享到:
相关推荐
使用OCCI开发Oracle9i数据库应用程序
VC 中使用OCCI访问Oracle数据库的研究.pdf
这是与其他几个资源相配套的源代码,希望对从事OCCI编程的人提供帮助。 之前的例子,学习C++和ORACLE数据库操作,非常有用,更多底层示例代码,请关系我的空间。
OCCI 方式添加Oracle数据库的多种数据字段支持,如Oracle的sdo_geometry字段。
该开发包里包含InstantClient、 SDK、VC9的库,并且已经使用VC9中的库覆盖了InstantClient中的库。
c++通过occi链接oracle数据库 本文档通过occi链接oracle数据库demo.
occi(oracle c++ call interface) api说明
让实例,让你清松掌握OCCI操作ORACLE数据库! 编写高效率的数据库操作程序
基于OCCI技术的Oracle9i数据库应用程序开发方法探讨.pdf
VC使用occi 连接 orcale 数据库。包括代码中包括一个写好的使用事例。
occi连接Oracle数据库,包含dll、lib、h文件,不需要安装oracle客户端,采用occi方式连接
Oracle C++调用接口(OCCI),即Oracle的C++API,允许你使用面向对象的特性、本地类、C++语言的方法来访问Oracle数据库
linux下c++的oracle数据库操作源码 occi实现
利用occi接口连接oracle c++代码
OCCI编程,vc访问oracle,occi
Oracle OCCI 连接示例程序 准备工作: http://www.oracle.com/technetwork/database/occidownloads-083553.html 1. 修改 项目属性-> C++ -> 常规 ->附加包含目录 , 指向你自己的 occi.h所在目录, 我的是 D:\...
如果oracle数据库默认没有安装OCCI,可以自己从官网上下载与自己数据库版本一致的API,地址:http://www.oracle.com/technetwork/topics/linuxsoft-082809.html ; 其中包含四个软件包: oracle-instant...
已经在vc6 xp系统下通过。在虚拟机的干净server2003(无客户端、无配置)系统下测试...3.分发到客户是还要MSVCRTD.DLL、msvcr71.dll、MSVCP60D.DLL和oracle一些dll的支持,具体是哪些就不列出来了,网上有很多都说过。
oracle培训ppt, occi的详细介绍以及常用方式的示例代码