VisualC++中连接Oracle数据库的几种方法.doc_第1页
VisualC++中连接Oracle数据库的几种方法.doc_第2页
VisualC++中连接Oracle数据库的几种方法.doc_第3页
VisualC++中连接Oracle数据库的几种方法.doc_第4页
VisualC++中连接Oracle数据库的几种方法.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Fars PDF整理 2012.7.25Visual C+中连接Oracle数据库的几种方法周计成,章立,刘晓林(78179部队,成都610000)(Fars整理)摘要介绍了Visual C+平台下连接Oracle数据库的几种主要方法,同时给出了具体的使用步骤和示例。对这几种方法的特点进行了分析,比较了它们的优点和应用范围。关键词:Visual C+;Oracle数据库开发;ADO;OCI;Pro*C 目录摘要II第一讲 引言1第二讲 VC连接Oracle数据库的方法22.1 ADO连接Oracle2(1)用#import指令引入 ADO类型库2(2)初始化OLE/COM库环境2(3)在VC+中用ADO连接oracle的示例22.2 OCI连接Oracle2(1)定义OCI句柄3(2)分配句柄3(3)连接数据库32.3 PROC方式连接Oracle4(1)PROC的可执行文件PROCUI. EXE4(2)Oracle支持SQL在VC环境的库文件OraSQL8. LIB4(3)Oracle支持SQL在VC环境的头文件4第三讲 连接方法的比较53.1 数据访问应用程序接口特性53.2 技术特性比较53.3 性能特性5参考文献6Read Me7III第一讲 引言Oracle数据库是一种广泛使用的数据库系统,它的功能强大,具有良好的性能和较高的安全保密性,提供了与高级语言配合的专用接口,可以使用主流的开发工具快速开发,同时支持C/S和B/S工作模式,因而被大量用到信息系统的开发中。Microsoft提供了许多相关组件支持数据库的访问,Oracle公司也提供了 Oracle数据库应用程序的开发接口。在Visual C+下连接 Oracle库主要有3种方法。一种方法是利用Visual C+提供的多种数据库访问技术,如 ActiveX数据对象 ADO、开放数据库连接 ODBC、数据存取对象 DAO、对象连接和嵌入数据库 OLE DB等。另一种方法是在 Visual C+中嵌入 SQL语句,文中指 Pro*C/C+(简称 PROC)。第三种方法是使用 Oracle公司提供的底层接口开发工具OCI。 第二讲 VC连接Oracle数据库的方法2.1 ADO连接Oracle用 ADO连接数据库的一般步骤如下:(1)用#import指令引入 ADO类型库在 stdafx.h中加入如下语句: #import c:program filescommon filessystemadomsado15.dll no_namespace rename ( EOF , adoEOF)它的作用是编译的时候系统会生成 msado15.tlh和 ado15. tli两个 C+头文件来定义 ADO库。在具体的开发环境中 msado15.dll不一定在这个目录下,可按实际情况修改该文件的路径。(2)初始化OLE/COM库环境 ADO库是一组 COM动态库,应用程序在调用 ADO前,必须初始化 OLE/COM库环境。在 MFC应用程序里,可以在应用程序主类的 InitInstance成员函数里初始化 OLE/COM库环境。(3)在VC+中用ADO连接oracle的示例 ADO库包含 3个基本接口 :_ConnectionPtr接口、_CommandPtr接口和 _RecordsetPtr接口。与数据库的连接就是用 _ConnectionPtr接口,它的连接字符串可以是自己直接写,也可以指向一个 ODBC DSN。在本例中用户名和密码都是 test,数据库名是 myoracle。下面是示例代码: _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; /初始化 COM,创建 ADO连接 AfxOleInit () ; m_pConnection.CreateInstance (_uuidof (Connection) ; try /建立数据库连接 m_pConnection.CreateInstance (_uuidof (Connection) ; m_pConnection -Open ( Provider =OraOLEDB.Oracle.1; Password= test;User ID= test;Data Source=myoracle;Persist Security Info=True , , ,adModeUnknown) ; catch (_com_error e) CString errormessage; errormessage.Format (数据库连接失败!rn错误信息:%s , e.ErrorMessage () ; AfxMessageBox (errormessage) ; 2.2 OCI连接Oracle Oracle专门为 C+提供了连接的接口 OCI,它是 Oracle公司提供的开发基于 Oracle数据库应用程序的底层接口,全面支持 Oracle的面向对象技术,具有速度快、支持第三代编程语言、对 Oracle数据库的控制功能强等优点。OCI接口支持 Windows系列操作系统,它所支持的 C语言编译器包括 Borland C+和 Microsoft Visual C+等。在使用 OCI开发 Oracle数据库应用程序之前,应首先安装这些操作系统和 C语言编译工具。通过 OCI连接数据库的步骤如下代码所示:(1)定义OCI句柄 public: OCIEnv *envhp; OCIServer *srvhp; OCISvcCtx *svchp; OCIError *errhp; OCISession *authp; OCIStmt *stmthp; OCIDescribe *dschp;(2)分配句柄 OCIEnvInit (&envhp,OCI_DEFAULT,0,0) /初始化环境变量:/分配服务句柄OCIHandleAlloc ( envhp, ( void*) &srvhp,OCI_HTYPE_SERVER,0,0) ; /分配环境句柄OCIHandleAlloc (envhp, (void*) &svchp, OCI_HTYPE_SVCCTX,0,0) ; /分配会话句柄OCIHandleAlloc (envhp, (void*) &authp, OCI_HTYPE_SESSION,0,0) ; /分配描述句柄OCIHandleAlloc (dvoid*)envhp, (dvoid*)&dschp, OCI_HTYPE_DESCRIBE,0,0);/分配语句句柄OCIHandleAlloc (dvoid*) envhp, (dvoid*) &stmthp, OCI_HTYPE_STMT,0,0) ; /分配错误句柄OCIHandleAlloc (envhp, (void*) &errhp, OCI_HTYPE_ERROR,0,0) ; (3)连接数据库在本例中 m_strDBName为数据库名,m_strDBName为用户名,m_strPWD为用户密码。 status =OCIServerAttach ( srvhp,errhp, ( unsigned char*) (LPCTSTR) m_strDBName, (sb4) strlen (m_strDBName) , OCI_DEFAULT) ; ErrorPro (errhp,OCIAttrSet (authp,OCI_HTYPE_SESSION, (void*) (LPCTSTR) m_strDBName, ( ub4) strlen ( m_strUserName) ,OCI_ATTR_USERNAME, errhp) ; ErrorPro (errhp,OCIAttrSet (authp,OCI_HTYPE_SESSION, ( void*) ( LPCTSTR) m_strPWD, ( ub4) strlen ( m_strPWD) ,OCI_ATTR_PASSWORD,errhp) ; status=OCISessionBegin (svchp,errhp,authp,OCI_CRED_RDBMS,OCI_DEFAULT) ;if (status! =0) return; else AfxMessageBox (成功地连接到了服务器) ; 2.3 PROC方式连接Oracle PROC是 Oracle公司提供的在第三代高级程序设计语言中嵌入 SQL语句来访问数据库的一套预编译程序。利用 Oracle公司提供的工具生成高级语言格式的源程序,然后就可以将这些源程序加入用户的程序中,开发出满足各种复杂要求的优化应用程序,具有较高的执行效率。 PROC在 VC下开发 Oracle库接口时,需要用到如下文件:(1)PROC的可执行文件PROCUI. EXE用 Oracle_HOME代表 Oracle安装后的根目录,当其以缺省方式安装在计算机的 D盘时,则 Oracle_HOME位置是 D: Oracle。PROC的可执行文件在 Oracle_HOME Ora81 BIN PROCUI. EXE。(2)Oracle支持SQL在VC环境的库文件OraSQL8. LIB OraSQL8. LIB文件在 Oracle_HOME Ora81 PRECOMP LIB MSVC OraSQL8.LIB。(3)Oracle支持SQL在VC环境的头文件头文件 *.h在 Oracle_HOME Ora81 PRECOMP PUBLIC *.h。为了方便完成用 PROC在 VC下开发 Oracle库接口,通常将 PROC集成到 Visual C+ 6.0环境中,直接在 C / C+环境中使用 PROC预编译器来预编译应用程序,然后进行编译和链接,最终生成可执行程序。下面是 PROC在 Visual C+环境下连接 Oracle数据库的方法。 void connect () EXEC SQL BEGIN DECLARE SECTION; struct unsigned short len; unsigned char arr 20 ; username; struct unsigned short len; unsigned char arr 10 ; password; struct unsigned short len; unsigned char arr 10 ; server; EXEC SQL END DECLARE SECTION; printf ( n输入用户名:) ; gets (username.arr) ; username.len = ( unsigned short) strlen ( ( char *) username.arr) ; printf ( n输入口令:) ; gets (password.arr) ; password.len = ( unsigned short) strlen ( ( char *) password.arr) ; printf ( n输入服务器名:) ; gets (server.arr) ; server.len= (unsigned short) strlen (char *) server.arr) ; /连接到 Oracle服务器上 EXEC SQL CONNECT :username IDENTIFIED BY : password USING :server; printf ( n用户%s成功地连接到了服务器 %s上! n , username.arr, server.arr); 第三讲 连接方法的比较比较这 3种方式, ADO因为是通用技术,开发起来比较容易,通用技术的速度太慢,如果我们要开发管理海量数据的数据库,比如影像数据库就无法胜任。OCI是一种底层接口,开发起来难度大一些,但是它的速度极快,几乎可以操纵 Oracle数据库的任何对象。使用 PROC进行数据库开发效率高,但要求对 Oracle数据库的运行机制十分了解。 3.1 数据访问应用程序接口特性 OCI在开放性、可视化、Oracle的连接能力方面比较好,但只适用于 Oracle数据库。ADO方法由于有 MFC强大的类库支持,熟悉 VC编程时则实现方便,且可移植性强。PROC支持嵌入 PL/SQL块直接调用 Oracle库,将过程化语言和非过程化语言相结合,适合熟悉 Oracle数据库本身的技术人员使用。 3.2 技术特性比较 OCI和 ADO在编程上采用面向对象技术,在和 Oracle连接时通过调用 Oracle OCI类型库来实现,应用程序在封装性、继承性和程序的再利用方面存在优势。而 PROC属结构化编程语言,它直接调用 Oracle SQL Lib来实现和数据库的连接,但用 PROC开发出的应用程序无法向异构数据库平台移植。 3.3 性能特性 PROC运行速度最快,其次是 OCI,最后是 ADO。因为, ADO与 PROC相比,应用程序需要经过两层才能和数据库通信接口建立联系,执行效率相对较低。参考文献1 Oracle Documentation Library (Release 8) . 2 杨培章,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论