C++连接Oracle 收藏

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

公告:[意见反馈][官方博客]C++连接Oracle收藏在VisualC++下开发Oracle库接口主要有两种方法。一种方法是利用VisualC++提供的多种数据库访问技术,如开放数据库连接ODBC、数据存取对象DAO、对象连接和嵌入数据库OLEDB和ActiveX数据对象ADO等。另一种方法是在VisualC++中嵌入SQL语句,这就是所指的Pro*C/C++(本文简称PROC)。前一种方法由于有MFC强大的类库支持,熟悉VC编程时则实现方便,且可移植性强;但是,与PROC相比,应用程序需要经过两层才能和数据库通信接口建立联系,编程相对复杂,执行效率相对较低。PROC支持嵌入式PL/SQL块等直接调用Oracle库,将过程化语言和非过程化语言相结合,形成一种更强的开发工具,可开发出满足各种复杂要求的优化应用程序,执行效率高。适合熟悉Oracle技术的人员应用。但是用PROC开发出的应用程序无法向异构数据库平台移植。本文详细描述实际利用PROC在VisualC++环境下开发Oracle数据库接口程序的方法和具体操作步骤,并给出了编程实例。叙述以VisualC++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。3、Oracle支持SQL在VC环境的头文件根据以上约定,头文件*.h在Oracle_HOME\Ora81\PRECOMP\PUBLIC\*.h,对缺省安装即在D:\Oracle\Ora81\PRECOMP\PUBLIC\*.h。*.h是头文件的总称,通常有十多个,具体内容可在指定路径下查到。将PROC集成到VC环境中为了方便完成用PROC在VC下开发Oracle库接口,通常将PROC集成到VisualC++6.0环境中,直接在C/C++环境中使用PROC预编译器来预编译应用程序,然后进行编译和链接,最终生成可执行程序。将PROC集成到VC环境中应完成如下工作。1、增加PROC到Tools菜单列表a)运行MicrosoftVisualC++6.0;b)从菜单项Tools中选择Customize项。为表述简单起见,书写成如下格式:菜单Tools/Customize项。以下采用类似的表达方法。此时出现Customize对话框;c)单击Tools选项卡(或属性页),用鼠标移动“Menucontents”框滚动条到底部区域;d)双击点划线矩形区域,在空白区域上输入“PROC”,然后按回车键;e)在“Command”框中,输入PROC的可执行文件名。根据2.1节的说明,对缺省安装即输入D:\Oracle\Ora81\BIN\PROCUI.EXE;f)在“Arguments”框中输入“$(TargetName)”。其作用在从菜单Tools中选择PROC项时,VC会将当前项目名传递给PROC,尔后PROC会直接打开该项目文件目录下扩展名为.pre的同名文件;g)在“Initialdirectory”框中输入“$(WkspDir)”/单击“Close”按钮,完成将PROC集成到VC环境中的工作。2、指定头文件路径为了确保VC顺利完成编译链接,需要将Oracle提供的头文件增加到VC环境中。指定头文件路径的具体步骤如下。a)菜单Tools/Options项,出现“Options”对话框;b)单击“Directories”选项卡,从“Showdirectoriesfor:”列表框中选择“Includefiles”;c)移动“Directories”框的滚动条到底部区域;d)双击点划线矩形区域,在空白区域上输入包含Oracle支持SQL在VC环境头文件的子目录,根据2.3节的说明,对缺省安装即输入D:\Oracle\Ora81\PRECOMP\PUBLIC。编程举例1、程序内容一般SQL嵌入式程序主要有说明、包含头文件、子程序声明、主程序和子程序等部分组成,在主程序中调用有关子程序。必备的子程序通常有连接到数据库子程序、断开数据库子程序、错误处理子程序和完成某项具体事务(如查询、插入、修改、删除等)的工作子程序。2、程序举例下面是一完整的可通过预编译、编译链接和运行的示例程序。/*exam01.pc开发Oracle接口程序举例*//*说明:本程序介绍用PROC开发Oracle库接口的编程特点。通过向AUTHS*表输入作家代码,查询作家姓名及工资。运行前应建表、插入数据并提交。*/#includestdio.h#includestring.h#includestdlib.h/*包含SQL通讯区,它用于处理错误。*/#includesqlca.hvoidconnect();/*连接到OracleServer*/voiddisconnect();/*断开到OracleServer的连接*/voidsql_error(char*);/*处理错误句柄*/voidselect();/*查询子程序*/externsqlglm(char*,int*,int*);/*主程序*/voidmain(){/*安装错误处理句柄*/EXECSQLWHENEVERSQLERRORDOsql_error(Oracle错误--\n);/*连接到数据库*/connect();/*执行查询*/select();/*断开数据库连接*/disconnect();}/*子程序*//*连接子程序connect()*/voidconnect(){EXECSQLBEGINDECLARESECTION;VARCHARusername[10],password[10],server[10];EXECSQLENDDECLARESECTION;/*输入用户名、口令以及服务器名*/printf(\n输入用户名:);gets(username.arr);username.len=(unsignedshort)strlen((char*)username.arr);printf(\n输入口令:);gets(password.arr);password.len=(unsignedshort)strlen((char*)password.arr);printf(\n输入服务器名:);gets(server.arr);server.len=(unsignedshort)strlen((char*)server.arr);/*连接到Oracle服务器上*/EXECSQLCONNECT:usernameIDENTIFIEDBY:passwordUSING:server;printf(\n以用户%s成功地连接到了服务器%s上!\n,username.arr,server.arr);}/*断开连接子程序disconnect()*/voiddisconnect(){chartemp;printf(\n是否在断开连接前提交所有事务?(Y/N));scanf(%c,&temp);fflush(stdin);if(temp!='Y'&&temp!='y'){/*回退事务,断开连接。*/EXECSQLROLLBACKWORKRELEASE;printf(\n回退事务,断开连接,退出程序!\n\n);}else{/*提交事务,断开连接。*/EXECSQLCOMMITWORKRELEASE;printf(\n提交事务,断开连接,退出程序!\n\n);exit(1);}}/*查询子程序select()*首先输入作家代码,然后查询作家姓名和工资。*/voidselect(){EXECSQLBEGINDECLARESECTION;charauthor_code[8],name[10];floatsalary;shortsalary_ind;EXECSQLENDDECLARESECTION;printf(\n输入作家代码:);gets(author_code);/*查询作家姓名和工资*/EXECSQLSELECTname,salaryINTO:name,:salary:salary_indFROMauthsWHEREauthor_code=:author_code;/*根据指示变量的值来确定该作家的工资是否为空。*/if(salary_ind==0){printf(\n作家代码\t作家姓名\t作家工资\n);printf(--------\t--------\t--------\n);printf(%8s\t%8s\t%8.2f\n,author_code,name,salary);}else{printf(作家%s的工资未录入,为空值!\n,name);}}/*错误处理子程序sql_error()*/voidsql_error(char*msg){charerr_msg[128];size_tbuf_len,msg_len;/*出现SQL错误,继续往下执行。*/EXECSQLWHENEVERSQLERRORCONTINUE;printf(\n%s\n,msg);buf_len=sizeof(err_msg);/*调用函数sqlglm()获得错误消息。*/sqlglm(err_msg,&buf_len,&msg_len);printf(%.*s\n,msg_len,err_msg);/*回退事务,断开连接,退出程序。*/EXECSQLROLLBACKRELEASE;exit(EXIT_FAILURE);}3、建表和插入数据记录上述示例程序如要正确运行,还需以Oracle库的合法用户登录,并创建AUTHS表和插入一些数据记录。建表文件、建表命令和插入数据记录的示例命令如下所述。这里叙述的工作完成后,上节生成的可执行文件才能正确运行。REM以下为建表文件auths.SQLDROPTABLEauthsCASCADECONSTRAINTS/CREATETABLEauths(AUTHOR_CODEVARCHAR2(8)NOTNULL,NAMEVARCHAR2(10),BIRTHDATEDATE,ENTRY_DATE_TIMEDATE,SALARYNUMBER(7,2),remarkVARCHAR2(255))/REM下一行为在PL/SQL环境中运行建表文件的命令REM@E:\PROCW\Exam01\auths.sqlREM下一行为在PL/SQL环境中向auths表插入数据的命令,插入后应提交(COMMIT)!REMINSERTINTOauths(author_code,name,salary)VALUES('A00001','王达琳',1200);发表于@2006年09月04日13:58:00|评论(loading...)|编辑|举报|收藏旧一篇:清华梦的粉碎—写给清华大学的退学申请|新一篇:破解WINDOWSXP登陆口令的方法查看最新精华文章请访问博客首页相关文章VC.Net从DLL传递消息到EXEVisualFC使用-内联函数选择,与原始代码保持一致VC下利用Pro*C开发Oracle接口vc笔记一应用程序与DLL的通信在VC++中如何封装自己的函数成库?关于预编译头VC下利用Pro*C开发Oracle接口发表评论本文来自CSDN博客,转载请标明出处:

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功