C++ 操作oracle 数据库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库操作方式:可以采用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.XXX.XXX.XXX)(PORT = 1521))
5. )
6. (CONNECT_DATA =
7. (SERVICE_NAME = BM2D0)
8. )
9. )
其中橄榄色可任意起名,一般在数据库连接是作为服务和用户名、密码一起确定数据库连接的参数。
第一个鲜粉色是远程oracle数据库所在服务器的IP地址,端口号一般为1521。
第二个鲜粉色是远程oracle所在主机的全局数据库名字,不能随意更改。
后两个搭配起来能够确定唯一连接对象。
客户端连接:
方式一:ADO
main.cpp
点击(此处)折叠或打开
1.#include "DBOperation.h"
2.#include
ing namespace std;
4.
5.void main()
6.{
7. CDBOperation dbOper;
8. bool bConn = dbOper.ConnToDB("Provider=OraOLEDB.Oracle.1;Persist Securi
ty Info=True;Data Source=xxx1","xxx2","xxx3");
9.if(false== bConn)
10.{
11. printf("连接数据库出现错误\n");
12. system("PAUSE");
13. return;
14.}
15.
16. _RecordsetPtr pRst;
17.
18.//执行查询语句
19.//char *sql ="select * from TSTUDENT";
20. char sql[255]={0};
21. strcpy(sql,"select * from TSTUDENT");
22. pRst = dbOper.ExecuteWithResSQL(sql);
23.if(NULL== pRst)
24.{
25. printf("查询数据出现错误!\n");
26. system("PAUSE");
27. return;
28.}
29.if(pRst->adoEOF)
30.{
31. pRst->Close();
32. printf("There is no records in this table\n");
33. return;
34.}
35. _variant_t vSno, 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(_variant_t("name"));
41. v*** = pRst->GetCollect(_variant_t("***"));
42. vAge = pRst->GetCollect(_variant_t("age"));
43.//vDno = pRst->GetCollect("dno");
44.//vDname = pRst->GetCollect("dname");
45.//vCname = pRst->GetCollect("cname");
46.
47. printf("%s\t%s\t%s\t%d\n",(LPSTR)(LPCSTR)(_bstr_t)vSno,(LPSTR)(LP
CSTR)_bstr_t(vName),(LPSTR)(LPCSTR)_bstr_t(v***), vAge.intVal);
48. pRst->MoveNext();
49.}
50.
51.//执行插入语句
52.//sprintf(sql,"insert into TSTUDENT(sno, name, ***, age) values('%s',
'%s', '%s', %d)","20080016","全局","女", 25);
53. strcpy(sql,"insert into TSTUDENT(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,"delete from TSTUDENT where sno = '%s'","20080017");
62. pRst = dbOper.ExecuteWithResSQL(sql);
63.if(NULL!= pRst)
64.{
65. printf("删除数据成功\n");
66.}
67. system("PAUSE");
68.//pRst->Close();
69.}
其中XXX1:是tnsnames.ora中配置的服务名,XXX2是用户名,XXX3是密码。
DBOperation.h:
点击(此处)折叠或打开
1.#pragma once
2.#import "c:\program files\common files\system\ado\msado15.dll" no_namespace
rename("EOF","adoEOF")