Visual C++中连接Oracle数据库的几种方法
周计成,章立,刘晓林
(78179,成都610000)
(Fars整理)
I
Fars PDF整理 2012.7.25
摘要
介绍了Visual C++平台下连接Oracle数据库的几种主要方法,同时给出了具体的使用步骤和示例。对这几种方法的特点进行了分析,比较了它们的优点和应用范围。
关键词:
Visual C++;Oracle数据库开发;ADO;OCI;Pro*C
II
Fars PDF整理 2012.7.25
目录
Visual C++中连接Oracle数据库的几种方法 ......................................................................................................................... I 摘要 ................................................................................................................................................................................................ 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 ............................................................................................................................................................ 4
(1)定义OCI句柄 ...................................................................................................................................................... 5 (2)分配句柄 ............................................................................................................................................................... 5 (3)连接数据库 ........................................................................................................................................................... 6 2.3 PROC方式连接Oracle ................................................................................................................................................ 7
(1)PROC的可执行文件PROCUI. EXE .................................................................................................................. 8 (2)Oracle支持SQL在VC环境的库文件OraSQL8. LIB.................................................................................... 8 (3)Oracle支持SQL在VC环境的头文件 ............................................................................................................. 8
第三讲 连接方法的比较.............................................................................................................................................................. 11
3.1 数据访问应用程序接口特性 ........................................................................................................................................ 11 3.2 技术特性比较 ............................................................................................................................................................... 11 3.3 性能特性 ....................................................................................................................................................................... 11 参考文献 ....................................................................................................................................................................................... 13 Read Me ...................................................................................................................................................................................... 14
III
Fars PDF整理 2012.7.25
0
Fars PDF整理 2012.7.25
第一讲 引言
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。
1
Fars PDF整理 2012.7.25
第二讲 VC连接Oracle数据库的方法
2.1 ADO连接Oracle
用 ADO连接数据库的一般步骤如下:
(1)用#import指令引入 ADO类型库
在 stdafx.h中加入如下语句:
#import \" c:program files\\common files\\system\\ado\\msado15.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接口和
2
Fars PDF整理 2012.7.25
_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;
3
Fars PDF整理 2012.7.25
Password= test;User ID= test;Data Source=myoracle;
Persist Security Info=True\" ,\"\" ,\"\" ,adModeUnknown) ;
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format (\"数据库连接失败!\\r\\n错误信息:%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语言编译工具。
4
Fars PDF整理 2012.7.25
通过 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) //初始化环境变量:
//分配服务句柄
5
Fars PDF整理 2012.7.25
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为用户密码。
6
Fars PDF整理 2012.7.25
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_strP-WD) ,
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公司提供的工具生成高级语言格式的源程序,然后就可
7
Fars PDF整理 2012.7.25
以将这些源程序加入用户的程序中,开发出满足各种复杂要求的优化应用程序,具有较高的执行效率。
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数据库的方法。
8
Fars PDF整理 2012.7.25
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) ;
9
Fars PDF整理 2012.7.25
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);
}
10
Fars PDF整理 2012.7.25
第三讲 连接方法的比较
比较这 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相比,应
11
Fars PDF整理 2012.7.25
用程序需要经过两层才能和数据库通信接口建立联系,执行效率相对较低。
12
Fars PDF整理 2012.7.25
参考文献
[1] Oracle Documentation Library (Release 8) .
[2] 杨培章,马东洋,陶治宇,等. OCI接口简介及其在 VC++中的应用 [J] .电脑编程技术与维护,2003.
[3] Microsoft.MSDN Library Visual Studio 6.0. http:// www.microsoft.com/china/ developer,2005.
[4] 张晓林,吴斌,晁阳. Oracle数据库开发基础教程 [M] .清华大学出版社,2009.
13
Fars PDF整理 2012.7.25
Read Me
本文来自于网络《VC_中连接Oracle数据库的几种方法》PDF文档,只是稍作修改,便于阅读。
若有侵犯原作者的合法权益之处,请联系我,我会及时更换。
祝大家学习棒棒,天天向上!
最后,感谢大家的支持!
14
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务