《2022年C操作ORACLE数据库 .pdf》由会员分享,可在线阅读,更多相关《2022年C操作ORACLE数据库 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库操作方式 :可以采用 ADO 方式,也可以采用oracle 本身提供的 Proc*C/C+ 或者是 OCCI方式操作数据库。连接方式 :可以是客户端连接、也可以是服务器端连接。数据库配置 :无论是何种连接都需要进行数据库连接的配置,一般在 ORACLE_HOME下面的 network/admin/tnsnames.ora文件中进行配置,如果没有此目录或者是此文件, 需要自己手工添加。 内容格式大致如下:点击(此处 )折叠或打开1.BM2D0 =2.(DESCRIPTION=3.(ADDRESS_LIST=4.(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.X
2、XX.XXX.XXX )( PORT = 1521)5.)6.(CONNECT_DATA=7.(SERVICE_NAME = BM2D0)8.)9.)其中橄榄色可任意起名,一般在数据库连接是作为服务和用户名、密码一起确定数据库连接的参数。第一个鲜粉色是远程oracle数据库所在服务器的IP 地址,端口号一般为 1521。第二个鲜粉色是远程oracle所在主机的全局数据库名字,不能随意更改。后两个搭配起来能够确定唯一连接对象。客户端连接:方式一: ADOmain.cpp名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
3、- - - - - - - 第 1 页,共 10 页 - - - - - - - - - 点击(此处 )折叠或打开1.#includeDBOperation.h2.#include3.usingnamespacestd ;4.5.voidmain ()6.7.CDBOperationdbOper ;8.boolbConn= dbOper . ConnToDB( Provider=OraOLEDB.Oracle.1;PersistSecurityInfo=True;DataSource=xxx1,xxx2,xxx3);9.if( false= bConn)10.11.printf( 连接数据库出
4、现错误n );12.system ( PAUSE );13.return;14.15.16._RecordsetPtrpRst ;17.18./ 执行查询语句19./ char* sql= select* fromTSTUDENT;20.charsql 255 = 0;21.strcpy( sql ,select* fromTSTUDENT);22.pRst= dbOper . ExecuteWithResSQL( sql );23.if( NULL = pRst )24.25.printf( 查询数据出现错误!n );26.system ( PAUSE );27.return;28.29.i
5、f( pRst - adoEOF)30.31.pRst - Close ();32.printf( Thereisno recordsinthistablen);33.return;34.35._variant_tvSno ,vName,v* ,vAge ,vDno,vDname,vCname;36.while(! pRst - adoEOF)37.38./ pRst - MoveFirst();/ 记录集指针移动到查询结果集的前面39.vSno = pRst - GetCollect( _variant_t( long ) 0);40.vName = pRst - GetCollect( _
6、variant_t( name );41.v*= pRst - GetCollect( _variant_t( *);42.vAge = pRst - GetCollect( _variant_t( age );名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 43./ vDno = pRst - GetCollect( dno );44./ vDname = pRst - GetCollect( dname );45./ vC
7、name = pRst - GetCollect( cname );46.47.printf( %st%st%st%dn,( LPSTR)( LPCSTR )( _bstr_t) vSno ,( LPSTR)( LPCSTR) _bstr_t( vName),( LPSTR)( LPCSTR) _bstr_t( v* ),vAge . intVal);48.pRst - MoveNext ();49.50.51./ 执行插入语句52./ sprintf( sql ,insertintoTSTUDENT(sno,name,*,age)values(%s,%s,%s,%d) ,20080016,全
8、局 , 女,25);53.strcpy( sql ,insertintoTSTUDENT(sno,name,*,age)values(20080001, 全局 , 女,25) );54.pRst= dbOper . ExecuteWithResSQL( sql );55.if( NULL !=pRst )56.57.printf( 插入数据成功 n );58.59./ 执行删除语句60.61.sprintf( sql ,deletefromTSTUDENT wheresno= %s,20080017);62.pRst= dbOper . ExecuteWithResSQL( sql );63.
9、if( NULL !=pRst )64.65.printf( 删除数据成功 n );66.67.system ( PAUSE );68./ pRst - Close ();69.其中 XXX1 :是 tnsnames.ora 中配置的服务名, XXX2是用户名, XXX3是密码。DBOperation.h:点击(此处 )折叠或打开1.#pragmaonce2.#importc:programfilescommonfilessystemadomsado15.dllno_namespacerename ( EOF ,adoEOF )名师资料总结 - - -精品资料欢迎下载 - - - - - -
10、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 3.classCDBOperation4.5.public:6./ 初始化数据库操作需要的对象7.CDBOperation( void );8.CDBOperation( void );9./ 连接至数据库10.boolConnToDB( char* ConnectionString,char* UserID ,char*Password );11.12./ 数据库操作函数13./ 查询操作删除以及添加14._RecordsetPtrExecu
11、teWithResSQL( constchar*);15./ boolExecuteNoResSQL ( constchar*);/deleteand add16.17.private:18.voidPrintErrorInfo( _com_error&);19.20.private:21./ 初始化数据库连接、命令、记录集22._ConnectionPtrCreateConnPtr();23._CommandPtrCreateCommPtr();24._RecordsetPtrCreateRecsetPtr();25.26.private:27./ 数据库连接需要的连接、命令操作对象28._
12、ConnectionPtrm_pConnection;29._CommandPtrm_pCommand ;30.;DBOperation.cpp点击(此处 )折叠或打开1.#includeDBOperation.h2.3.CDBOperation: CDBOperation( void )4.5.CoInitialize( NULL);6.m_pConnection= CreateConnPtr();7.m_pCommand = CreateCommPtr();8.9.10.CDBOperation: CDBOperation( void )11.名师资料总结 - - -精品资料欢迎下载 -
13、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 12./ m_pCommand - Close ();13.m_pConnection- Close ();14.15.16.boolCDBOperation: ConnToDB( char* ConnectionString,char*UserID ,char* Password )17.18.if( NULL = m_pConnection)19.20.printf( Failedtocreateconnectionn)
14、;21.returnfalse;22.23.24.try25.26.HRESULT hr= m_pConnection- Open( ConnectionString,UserID ,Password,NULL);27.if( TRUE = FAILED ( hr )28.29.returnfalse;30.31.m_pCommand - ActiveConnection= m_pConnection;32.returntrue;33.34.catch ( _com_error&e)35.36.PrintErrorInfo( e);37.returnfalse;38.39.40.41._Rec
15、ordsetPtrCDBOperation: ExecuteWithResSQL( constchar*sql )42.43./ 已经在连接至数据库的时候进行判断了44./ if( NULL = m_pCommand |0 = m_pConnection- State)45./46./printf( Failedtocreatecommand OR thestateofconnectioniszeron);47./returnNULL;48./49.50./ char* query= new char ;51./ strcpy( query ,sql );52.try名师资料总结 - - -精
16、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 53.54.m_pCommand - CommandText= _bstr_t( sql );55._RecordsetPtrpRst= m_pCommand - Execute ( NULL,NULL,adCmdText );56.returnpRst ;57./ _variant_tra ;58./ _RecordsetPtrpRst= m_pConnection- Execute ( _bstr_t
17、) query ,&ra,adCmdText );59.60.catch ( _com_error&e)61.62.PrintErrorInfo( e);63.returnNULL;64.65.66.67./ boolCDBOperation: ExecuteNoResSQL ( constchar* sql )68./69./ if( NULL = m_pCommand |0 = m_pConnection- State)70./71./printf();72./73./try74./75./char* query= NULL;76./strcpy( query ,sql );77./m_p
18、Command - CommandText= ( _bstr_t) query ;78./79./80./81.82.voidCDBOperation: PrintErrorInfo( _com_error&e)83.84.printf( Errorinfomationareas followsn);85.printf( ErrorNo:%dnErrorMessage:%snErrorSource:%snErrorDescription:%sn,e. Error(),e. ErrorMessage(),( LPCTSTR) e. Source (),( LPCTSTR) e. Descript
19、ion();86.87.88._ConnectionPtrCDBOperation: CreateConnPtr()89.90.HRESULT hr ;91._ConnectionPtrconnPtr;92.hr= connPtr. CreateInstance( _uuidof( Connection);93.if( FAILED ( hr )= TRUE)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 94.95.retu
20、rnNULL;96.97.returnconnPtr;98.99.100._CommandPtrCDBOperation: CreateCommPtr()101.102.HRESULT hr ;103._CommandPtrcommPtr ;104.hr= commPtr . CreateInstance( _uuidof( Command );105.if( FAILED ( hr )= TRUE)106.107.returnNULL;108.109.returncommPtr ;110.111.112._RecordsetPtrCDBOperation: CreateRecsetPtr()
21、113.114.HRESULT hr ;115._RecordsetPtrrecsetPtr;116.hr= recsetPtr. CreateInstance( _uuidof(Command );117.if( FAILED ( hr )=TRUE)118.119.returnNULL;120.121.returnrecsetPtr;122.方式二: OCCI默认 oracle 安装了 occi 库,但是只是安装了release 版本的资源,因此需要将程序配置为release 模式,或者是参看http:/ debug 模式获取必备的头文件以及库文件,本文采用的是release模式,使用默认
22、安装的库文件以及头文件。1. 修改配置属性名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - 改为 Rlease 模式2. 添加库文件目录$(ORACLE_HOME)ociinclude3. 添加头文件目录$(ORACLE_HOME)ocilib4. 添加库文件 :oraocci10.lib应用程序:点击(此处 )折叠或打开1./ 代码的目的就是验证makefile中 oracle的头文件和lib文件路径是否正确了2.#inclu
23、de3.#defineWIN32COMMON / 避免函数重定义错误4.#include5.usingnamespacestd ;6.usingnamespaceoracle: occi ;7.intmain ()8.9.Environment*env =Environment: createEnvironment();10.cout success createConnection( bsm3 ,bsm3 ,BSM3 );18.cout connsuccess terminateConnection( conn );20.21.catch ( SQLExceptione)22.23.cout
24、 e. what () endl ;24.system ( pause);25.return- 1;26.27.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 28.Environment: terminateEnvironment( env );29.cout end!endl ;30.system ( pause);31.return0;32.服务器端: AIX 服务器方式一: OCCIhelloworld.cpp点击(此
25、处 )折叠或打开1./ 代码的目的就是验证makefile中 oracle的头文件和lib文件路径是否正确了2.#include3.#include4.usingnamespacestd ;5.usingnamespaceoracle: occi ;6.main ()7.8.Environment*env =Environment: createEnvironment();9.cout success createConnection( name,pass ,srvName );17.cout connsuccess terminateConnection( conn );19.20.catc
26、h ( SQLExceptione)21.22.cout e. what () endl ;23.24.25.Environment: terminateEnvironment( env );26.cout end!endl ;27.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - Makefile:点击(此处 )折叠或打开1.#2.#MakefilefortheOCCI demo programs3.#4.INC=- I$ O
27、RACLE_HOME/ precomp / public- I$ ORACLE_HOME / rdbms / public5.LIB =- L$ ORACLE_HOME/ lib- locci#- bnoquiet#- bloadmap6.FLAGS =- q64- g7.#为方便取下面三个变量,目标为helloworld,源文件是helloworld. cpp ,编译后文件helloworld. o8.PRG =helloworld9.SRC =helloworld. cpp10.OBJ=helloworld. o11.#下面是常规的makefile内容, $ 表示依次取目标执行,这里只有h
28、elloworld一个目标。实际等价于12.#CC - o helloworldhelloworld. o 不过加入了include和 lib文件。而 helloworld. o 需要后续完成13.$( PRG ):$(OBJ)14.echo beginlink.15.$ CC $ FLAGS $ INC $ LIB - o $ $( OBJ)16.#helloworld目标依赖helloworld. o 生成,所以该句就是编译. c 生成 . o 文件。只不过加入了 include和 lib文件17.$( OBJ):$(SRC )18.echo begincompile.19.$ CC $
29、FLAGS $ INC $ LIB - c $( SRC)20.#后面的内容不是make 的内容了,而是make clean内容。比如想重新make 之前,清除 . o 等文件,执行make clean语句21.#. PRNOY语句表明clean关键词是个伪目标。make 不自动执行。22. PRONY : clean23.clean :24.echo Removinglinkedand compiledfiles.25.rm - f$( OBJ)$( PRG )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -