C操作ORACLE数据库
- 格式:docx
- 大小:21.64 KB
- 文档页数:14
C操作ORACLE数据库
数据库操作方式:可以采用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
/doc/f45fb0253868011ca300a6c30c2259010202f3d7.html 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") 3.class CDBOperation
4.{
5.public:
6.//初始化数据库操作需要的对象
7.CDBOperation(void);
8.~CDBOperation(void);
9.//连接至数据库
10.bool
ConnToDB(char*ConnectionString,char*UserID,char*Password);
11.
12.//数据库操作函数
13.//查询操作删除以及添加
14._RecordsetPtr ExecuteWithResSQL(const char*);
15.//bool ExecuteNoResSQL(const char*);//delete and add
16.
17.private:
18.void PrintErrorInfo(_com_error&);
19.
20.private:
21.//初始化数据库连接、命令、记录集
22._ConnectionPtr CreateConnPtr();
23._CommandPtr CreateCommPtr();
24._RecordsetPtr CreateRecsetPtr();
25.
26.private:
27.//数据库连接需要的连接、命令操作对象
28._ConnectionPtr m_pConnection;
29._CommandPtr m_pCommand;
30.};
DBOperation.cpp 点击(此处)折叠或打开
1.#include"DBOperation.h"
2.
3.CDBOperation::CDBOperation(void)
4.{
5.CoInitialize(NULL);
6.m_pConnection=CreateConnPtr();
7.m_pCommand=CreateCommPtr();
8.}
9.
10.CDBOperation::~CDBOperation(void)
11.{
12.//m_pCommand->Close();
13.m_pConnection->Close();
14.}
15.
16.bool
CDBOperation::ConnToDB(char*ConnectionString,char*UserID,char*Pas
sword)
17.{
18.if(NULL==m_pConnection)
19.{
20.printf("Failed to create connection\n");
21.return false;
22.}
23.
24.try
25.{
26.HRESULT