VC net使用OCCI连接远程Oracle数据库
本文由aduanyue贡献
doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
VC++.net 使用 OCCI 连接远程 Oracle 数据库
用 C++去连 Oracle 数据库,Oracle 版本为 10g,在经过 n 次错误后终于成功连接。
最开始用 ADO 连,装上客户端以后,在 Oracle Net Manager 中设置服务命名,测试连接成功,然后设置 ODBC 数据源,测试也成功,ADO 连接串写上"DSN=xxx"就能连上了,但是在释放连接时总是出错,经过多次尝试后放弃,在网上看到 Oracle 专门为 C++提供了连接的接口 OCCI,于是尝试采用这种方法。
一、安装 Oracle 客户端
安装方式选择为管理员。
安装完以后设置服务命名。
在%ORACLIENTHOME%\NETWORK\ADMIN 目录下 tnsnames.ora 文件记录了服务命名的设置。
我的设置如下:
ORCL_192.168.0.3 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl) (SERVER = DEDICATED) ) ) ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ORCL_192.168.0.3) ) ) 其中 192.168.0.3 为远程 Oracle 服务器 IP 地址
设置完以后在 Net Manager 中测试连接,成功就 OK 了。
二、设置 VC++.net 环境
我用的编译器是VS2003,首先在工具选项中Project 添加包含文件%OracleClientHome%\Oci\include 添加库文件%OracleClientHome%\Oci\lib\msvc\vc71 和%OracleClientHome%\Oci\lib\msvc 如果是VC6.0 的话就添加%OracleClientHome%\Oci\lib\msvc\vc6。
然后设置项目属性,在编译器链接中添加 lib 文件,oraocci10d.lib,之后把 oraocci10d.dll 文件复制到 system32 目录下,这个文件在 VC71 目录下。
第三步在 C++代码生成中设置运行时库为多线程 DLL 或是多线程调试DLL,注意这一步设置很重要,没有设置的话会造成 getString 函数出错。
三、代码
#include " stdafx.h " #include <occi.h> usingnamespacestd; usingnamespace oracle::occi ; int main() { Environment * env = Environment::createEnvironment( " ZHS16GBK " , " UTF8 " ); //Environment *env=Environment::createEnvironment(Environment::DEFAULT); string mc; { Connection * conn = env ->createConnection( " system " , " system " , " orcl_192.168.0.3 " ); try { Statement * stmt = conn ->createStatement( " select * from test1 " ); ResultSet * rs = stmt ->executeQuery(); while (rs -> next() == true ) { mc = rs ->getString( 1 ); cout<< mc <<endl; }
stmt ->closeResultSet(rs); conn ->terminateStatement(stmt); } catch (SQLException e) { cout<<e.what(); } env ->terminateConnection(conn); } Environment::terminateEnvironment(env); system( " pause " ); return 0 ; }
orcl_192.168.0.3 就是前面设置的连接串。
测试成功。
以上就是所有的设置过程,唉,还是 jdbc 好连阿……注意,项目属性中运行时库一定要设置为多线程 DLL 或是多线程调试 DLL,否则 getString 函数就会出错,我在这个问题上也卡了很长时间,单步调试发现是在 string 对象析购时出错,在网上看到一篇文章得到答案。
原因是由于程序中使用的内存管理多来源于 crt 提供的例程,而非直接使用操作系统的接口,这些例程都需要维护一些module 全局数据(例如维护池、维护空闲块、或者标记已申请的块等等,不同的实现中有不同的作用),当他们被静态连编时,实际上这些“全局数据”就不“全局”了,不同的 module
各自为政,每份 module 都有自己的“全局数据”,自身的内存信息不为他人所知, module A 的合法内存快自然不可能通得过 module B 的合法性验证解决问题的方法有: 1、不要跨module 传递 c++对象,或者避免释放跨 module 申请的内存 2、将参与合作的 module 统统以 multithreaded dll 方式链入 crt 库,让他们的“全局”数据真正全局,注意,所有有交互的 module 都需要动态链入 crt。
vc环境下C连接oracle
概述在visual c++下开发oracle库接口主要有两种方法。
一种方法是利用visual c++提供的多种数据库访问技术,如开放数据库连接odbc、数据存取对象dao、对象连接和嵌入数据库ole db和activex数据对象ado等。
另一种方法是在visual c++中嵌入sql语句,这就是所指的pro*c/c++(本文简称proc)。
前一种方法由于有mfc 强大的类库支持,熟悉vc编程时则实现方便,且可移植性强;但是,与proc 相比,应用程序需要经过两层才能和数据库通信接口建立联系,编程相对复杂,执行效率相对较低。
proc支持嵌入式pl/sql 块等直接调用oracle 库,将过程化语言和非过程化语言相结合,形成一种更强的开发工具,可开发出满足各种复杂要求的优化应用程序,执行效率高。
适合熟悉oracle技术的人员应用。
但是用proc 开发出的应用程序无法向异构数据库平台移植。
-fXqmfL [转贴于我的学习网IT认证ORACLE/CIW认证)-fXqmfL本文详细描述实际利用proc在visual c++环境下开发oracle数据库接口程序的方法和具体操作步骤,并给出了编程实例。
叙述以visual c++ 6.0版和oracle8i版为例,其他版本可根据实际情况变更。
几个特殊文件proc在vc下开发oracle库接口时,需要用到几个特殊文件。
1、proc的可执行文件procui. exe用oracle_home代表oracle安装后的根目录,当其以缺省方式安装在计算机的d盘时,则oracle_home位置是d: \ oracle。
这时proc的可执行文件在oracle_home \ ora81 \ bin \ procui. exe,对缺省安装即在d: \ oracle \ ora81 \ bin \ procui. exe。
2、oracle支持sql在vc环境的库文件orasql8. lib根据以上约定,orasql8. lib文件在oracle_home \ ora81 \ precomp \ lib \ msvc \ orasql8.lib,对缺省安装即在d: \ oracle \ ora81 \ precomp \ lib \ msvc \ orasql8.lib。
如何连接别人的ORACLE数据库
如何连接别人电脑上的ORACLE数据库(以oracle9i版本为例,本机必须安装oralce9i的客户端)
第一步:orahome92-configuration and migration tools- net managers
第二步:在“服务命名”中点“+”
第三步:编辑一个你的服务名,(不是对方的数据库名)
第四步:默认选择TCP/IP
第五步:主机名填入对方的机器IP地址,端口默认(不要改)
第六步:服务名是对方的数据库名(要问对方),连接类型默认(不要改)
第七步:连接测试
一般测试结果需要“更改登录”
更改登录中,在用户名和口令中,录入对方数据库的用户名口令(你要访问的库)
测试成功!点击“关闭”
点“完成”
第八步:保存网络配置
在“E:\oracle\ora92\network\admin”中打开tnsnames.ora,可以看到配置情况:MORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.34)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
第九步:到此,可以检查配置是否正确,是否连接成功
运行—输入sqlplus,在“请输入用户名”中键入数据库连接方式
第十步:连接成功,可以通过PLSQL等客户端工具连接别人的数据库了!。
VS2013位使用64位ocilib进行64位oracle11g连接配置教程
VS2013位使用64位ocilib进行64位oracle11g连接配置
教程
本机环境,windows 7 sp1 旗舰版64位。
Oracle 11g client 64位。
Visual studio 2013-ultimate-u5
Oci-3.12.1解压在d盘根目录下。
在vs2013中新建项目。
右键你的项目-属性-VC++目录-包含目录,编辑选择ocilib的include目录
右键你的项目-属性-C/C++-常规-附加包含目录,编辑选择ocilib 的include目录
右键你的项目-属性-链接库-常规-附加库目录,编辑选择ocilib的lib64目录
右键你的项目-属性-链接库-输入-附加依赖项,输入你要使用的lib库。
对于dll文件,放在项目对应debug文件夹下。
Vs2013编译
选择生成-配置管理器
新建x64平台,选择x64平台。
然后再生成解决方案,在运行,ok。
之前遇到无法加载oci.dll的问题,是因为,我系统装的oracle client是64位的,所以其bin 目录下的oci.dll也是64位的,导致在用32位编译的时候,调用不了64位的dll文件。
将所有的都改成64位统一后,就能使用ocilib连接oracle进行操作了。
操作的代码略,可以百度ocilib连接oracle的例子,本文只提供配置方法。
C++ 使用OCILIB 连接Oracle数据库 总结
====== 参考文献 ====== -/blog/1059676 -/p/ocilib/ -/jackyxinli/archive/2009/07/30/91711.html -ocilib 中的文档
using namespace std;
// 用来提示错误的句柄 void err_handler(OCI_Error *err) {
printf( "code : ORA-%05i\n" "msg : %s\n" "sql : %s\n", OCI_ErrorGetOCICode(err), OCI_ErrorGetString(err), OCI_GetSql(OCI_ErrorGetStatement(err))
printf("证券代码: %i, 日期: %i \n", OCI_GetInt(rs,1), OCI_GetInt(rs,2)); }
OCI_StatementFree(st); OCI_ConnectionFree(cn); }else{ cout << "数据库连接失败" << endl; } OCI_Cleanup();
); }
int main(){ OCI_Connection *cn;
[C++]通过OCCI操作Oracle数据库详解
[C++]通过OCCI操作Oracle数据库详解 今⽇趁空,尝试⽤C++操作Oracle数据库。
⼤致步骤列举如下:1.安装OCCIoracle-instantclient-sqlplus-10.2.0.5-1.i386.rpmoracle-instantclient-devel-10.2.0.5-1.i386.rpmoracle-instantclient-odbc-10.2.0.5-1.i386.rpmoracle-instantclient-basic-10.2.0.5-1.i386.rpm安装完成之后,会在/usr/lib下多个oracle 共享库⽂件夹,在/usr/include下多个oracle 头⽂件(接⼝)⽂件夹(可以将他们放到环境变量中)。
我的数据库版本是10.2.0,下⾯以此为例。
2.编写HelloWorld程序测试连接#include <iostream>#define LINUXOCCI //避免函数重定义错误#include <occi.h>using namespace std;using namespace oracle::occi;int main(){Environment *env=Environment::createEnvironment(Environment::DEFAULT);cout<<"success"<<endl;string name = "scott";string pass = "tiger";string srvName = "127.0.0.1:1522/orcl";try{Connection *conn = env->createConnection(name, pass);cout<<"conn success"<<endl;env->terminateConnection(conn);}catch(SQLException e){cout<<e.what()<<endl;return -1;}Environment::terminateEnvironment(env);cout<<"end!"<<endl;return0;}编译命令:g++ -o test -I/usr/include/oracle/10.2.0.5/client -L/usr/lib/oracle/10.2.0.5/client/lib -locci -lsqlplus我没有将occi的路径加⼊到环境变量中,所以此处要显⽰列出⽬录才能通过编译,找到共享库。
Oracle数据库远程连接设置的四种方法
Oracle数据库远程连接设置的四种方法Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍。
第一种情况:若oracle服务器装在本机上,那就不多说了,连接只是用户名和密码的问题了。
不过要注意环境变量%ORACLE_HOME%/network/admin/是否设置。
第二种情况:本机未安装oracle服务器,也未安装oracle客户端。
但是安装了pl sql development、toad sqldevelopment、sql navigator等管理数据库的工具。
在虚拟机或者另一台电脑上安装了oracle服务器,也就是虚拟机或者另一台电脑此时作为服务器。
这种情况下,本人以pl sql development远程连接ORACLE服务端数据库为例:1、在安装oracle服务器的机器上搜索下列文件:∙oci.dll∙ocijdbc10.dll∙ociw32.dll∙orannzsbb10.dll∙oraocci10.dll∙oraociei10.dll∙sqlnet.ora∙tnsnames.ora∙classes12.jar∙ojdbc14.jar把这些找到的文件复制放到一个文件夹,如 oraclient,将此文件夹复制到客户端机器上。
如放置路径为D:oraclient。
2、配置tnsnames.ora,修改其中的数据库连接串。
1.oracledata =2.3.(DESCRIPTION =4.5.(ADDRESS_LIST =6.7.(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521))8.9.(CONNECT_DATA =10.11.(SERVICE_NAME = oracledata)12.13.)其中,oracledata是要连接的服务名;HOST = 192.168.0.58,是服务器IP地址;PORT = 1521是端口号。
怎么使用OCCI编程-
怎么使用OCCI编程?Oracle给各种编程语言都提供了编程接口,其中C++++的编程模块就是OCCI,通过OCCI我们可以很方便的访问数据的信息,读取数据库的属性,下面我们看看怎么使用OCCI编程。
本文使用Centos 7.0为例,Oracle的版本是12.2一,环境准备1.1 默认的Oracle安装中没有提供OCCI接口的包,需要我们在Oracle官网下载,地址是:https://oracle/technetwork/topics/linuxsoft-082809l需要安装下面几个内容:oracle-instantclient12.2-devel-12.2.0.1.0-1.i386.rpm (606,868 bytes) (cksum - 1259587459) oracle-instantclient12.2-basic-12.2.0.1.0-1.i386.rpm (49,071,616 bytes) (cksum - 2998080493) oracle-instantclient12.2-odbc-12.2.0.1.0-2.i386.rpm (223,276 bytes) (cksum - 1211395846) oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm (689,504 bytes) (cksum - 3705787612)直接运行#rpm –i 包名.rpm 安装即可。
1.2 安装完成后需要设置环境变量,在~/.bashrc中或者/etc/profile中添加下面的命令设置环境变量。
exportORACLE_HOME=/usr/lib/oracle/12.2/client64exportTNS_ADMIN=${ORACLE_HOME}/network/adminexportNLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8# simplifiedchinese_china.UTF8exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib exportPATH=${ORACLE_HOME}/bin:$PATHexportHISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "添加完成后记得source~/.bashrc 或者source /etc/profile,使得环境变量立即生效。
远程访问Oracle数据库
远程访问oracle数据库
1.开启双方的所有的Oracle的服务。
2.打开Net Configuration Assistant 配置监听器
选择“本地NET服务名配置”→然后下一步→添加
选择添加,然后“下一步”
选择Oracle8i火更高版本数据库或服务,然后“下一步”
服务器为你要连接的远程的数据库名称,一定要数据库名称相同,然后“下一步”
选择“tcp”协议,然后下一步
主机名为你要连接的机子IP(固定IP和局域网IP),然后选择“使用标准端口号1521”→然后“下一步”
选择“是,进行测试”→然后“下一步”
选择“更改登录”
然后输入要连接Oracle数据库的用户名和密码。
才显示测试成功。
然后“下一步”
Net服务名为venice和要连接的数据库的名称相同。
然后“下一步”
选择“否”,然后“下一步”
配置完成,然后“下一步”
直接点击“完成”
3.查看是否监听器正在监听远程数据库。
打开。
选择“本地”→监听程序→“listener”→数据库服务现在一切都OK了。
跟我学Oracle从入门到精通培训教程——如何远程连接其他主机中的Oracle数据库系统
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(7)再继续点击“下一步”按钮
(8)点击“完成”按钮后,将出现下面的结果
杨教授工作室,版权所有,盗版必究, 4/14 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
5、测试目标服务是否正确 (1)选择“命令”菜单中的“测试服务”子菜单
杨教授工作室,版权所有,盗版必究, 8/14 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
操作超时”的错误,出现这个问题的原因很多,但主要跟网络有关。解决这个问题,首先检 查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接。 (3)在 SQL*Plus 中登录连接远程 Oracle 服务器
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1
跟我学 Oracle 从入门到精通培训教程——如何远程连接其他主机中的
Oracle 数据库系统
1.1.1 利用 Oracle 系统中的“Net Manager”配置远程服务名 —— 连接其他 Oracle 数据库服务 1、为什么要应用 Oracle 的客户端程序 在进行团队开发的时候,一般团队的每一个人只需要安装一个客户端即可,没有必要安 装一个 Oracle 数据库服务器, 而数据库服务器是属于共享的, 此时, 我们就需要配置客户端。 而客户端的配置可以有以下两种方式: (1)使用 Net Configuration Assistant(基于向导式)
杨教授工作室,版权所有,盗版必究, 9/14 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
3、点击下一步,在对话框当中选择“添加” 当已经存在 Net 服务名时,可以选择重新配置,如果没有时,可以选择添加来添加一个 Net 服务名。
Visual C++中连接Oracle数据库的几种方法
Visual C++中连接Oracle数据库的几种方法周计成,章立,刘晓林(78179部队,成都610000)(Fars整理)摘要介绍了Visual C++平台下连接Oracle数据库的几种主要方法,同时给出了具体的使用步骤和示例。
对这几种方法的特点进行了分析,比较了它们的优点和应用范围。
关键词:Visual C++;Oracle数据库开发;ADO;OCI;Pro*C目录摘要 (II)第一讲引言 (1)第二讲VC连接Oracle数据库的方法 (2)2.1 ADO连接Oracle (2)(1)用#import指令引入ADO类型库 (2)(2)初始化OLE/COM库环境 (2)(3)在VC++中用ADO连接oracle的示例 (2)2.2 OCI连接Oracle (2)(1)定义OCI句柄 (3)(2)分配句柄 (3)(3)连接数据库 (3)2.3 PROC方式连接Oracle (4)(1)PROC的可执行文件PROCUI. EXE (4)(2)Oracle支持SQL在VC环境的库文件OraSQL8. LIB (4)(3)Oracle支持SQL在VC环境的头文件 (4)第三讲连接方法的比较 (5)3.1 数据访问应用程序接口特性 (5)3.2 技术特性比较 (5)3.3 性能特性 (5)参考文献 (6)Read Me (7)第一讲引言Oracle数据库是一种广泛使用的数据库系统,它的功能强大,具有良好的性能和较高的安全保密性,提供了与高级语言配合的专用接口,可以使用主流的开发工具快速开发,同时支持C/S和B/S工作模式,因而被大量用到信息系统的开发中。
Microsoft提供了许多相关组件支持数据库的访问,Oracle公司也提供了Oracle 数据库应用程序的开发接口。
在Visual C++下连接Oracle库主要有3种方法。
一种方法是利用Visual C++提供的多种数据库访问技术,如ActiveX数据对象ADO、开放数据库连接ODBC、数据存取对象DAO、对象连接和嵌入数据库OLE DB 等。
