根据网上大多数教程,一直报错ORA-12154: TNS:could not resolve the connect identifier specified,花了几个小时,终于搞定,记录备忘。
利用occi连oracle分别需要用到以下三个素材
下载链接分别在:
https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
https://www.oracle.com/technetwork/cn/database/occidownloads-083553-zhs.html
我使用vc2019,客户端环境是2008r2,oracle服务器环境是linux
使用c++ x64利用occi连oracle
为了减轻移植程序的部署难度,下面方法:
不需要sqlnet.ora;tnsnames.ora!!!!
不需要配置windows系统变量!!!!
搭建环境:
项目配置里,头文件目录添加:../3rdparty/Oracle\OCCI\instantclient-sdk-windows.x64-11.2.0.4.0\instantclient_11_2\sdk\include
代码头部:
#pragma comment(lib,"../3rdparty/Oracle/OCCI/occi_vc10_11_2_0_4_win64/oraocci11.lib")
#include <occi.h>
using namespace std;
using namespace oracle::occi;(不加这个也行,相关类前加上oracle::occi::类名)
部署:
把basic里的dll拷贝到你程序exe所在目录
把occi_vc10_11_2_0_4_win64目录里的2个dll拷贝到你程序exe所在目录,重名的覆盖(这是关键!不知为何,basic里的dll用不了!!!)
===============
再次更新本文,根据官方说明,
“Oracle Call Interface 19, 18 and 12.2 can connect to Oracle Database 11.2 or later.”
所以,可以用高版本接口,连11.2以上的数据库
所以,我放弃了11.2.0.4的接口,直接用18.5.0.0.0的basic和sdk(不用19.6.0.0.0的接口是因为它不支持win7,我不能保证我的用户都是win10,起码我自己不愿意用经常蓝屏的win10)。那么就简单了,lib和include用sdk里的,dll用basic里的。(里面有个vc14的文件夹,其中的文件在外部同样存在,但字节数不同,我不明白为什么,有谁知道请留言告诉我,谢谢)