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