zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

C语言连接Oracle数据库的方式简介(c 连接oracle方式)

2023-06-13 09:19:50 时间

C语言连接Oracle数据库的方式简介

Oracle数据库是目前全球最为流行和广泛使用的商业数据库软件之一。C语言是一门广泛应用于系统开发和嵌入式软件的高级编程语言。本文将介绍使用C语言连接Oracle数据库的几种方式。

1.使用OCI连接Oracle数据库

OCI(Oracle Call Interface)是Oracle提供的标准C语言API。通过OCI,可以在C语言程序中调用Oracle数据库。OCI提供了访问和操作Oracle数据库的丰富功能,并易于使用和集成。使用OCI连接Oracle数据库需要安装Oracle客户端和OCI头文件,并链接OCI库。以下是一个简单的使用OCI连接Oracle数据库的示例程序:

`c

#include //OCI头文件

#include

int mn()

{

OCIEnv *env; //OCI服务上下文句柄

OCIError *err; //OCI错误句柄

OCISvcCtx *svc; //OCI服务上下文句柄

OCISession *sesh; //OCI会话句柄

OCIStmt *stmt; //OCI语句句柄

//初始化OCI服务上下文句柄

OCIInitialize(OCI_DEFAULT, 0, 0, 0, 0);

OCIEnvInit( env, OCI_DEFAULT, 0, 0);

//创建OCI错误句柄

OCIHandleAlloc(env, (void **) err, OCI_HTYPE_ERROR, 0, NULL);

//创建OCI服务上下文句柄

OCIHandleAlloc(env, (void **) svc, OCI_HTYPE_SVCCTX, 0, NULL);

//连接到数据库

OCIAttrSet(svc, OCI_HTYPE_SVCCTX, (void *)db, strlen(db), OCI_ATTR_HOSTNAME, err);

OCIAttrSet(svc, OCI_HTYPE_SVCCTX, (void *)db, strlen(db), OCI_ATTR_USERNAME, err);

OCIAttrSet(svc, OCI_HTYPE_SVCCTX, (void *)pwd, strlen(pwd), OCI_ATTR_PASSWORD, err);

if(OCILogon(env, err, svc, strlen(user), (unsigned char *)user, strlen(pwd), (unsigned char *)pwd, (unsigned char *)db))

{

printf( Connect to Oracle database fled.\n );

return -1;

}

//创建OCI会话句柄

OCIHandleAlloc(env, (void **) sesh, OCI_HTYPE_SESSION, 0, NULL);

//设置用户上下文

OCIAttrSet(sesh, OCI_HTYPE_SESSION, (void *)user, strlen(user), OCI_ATTR_USERNAME, err);

OCIAttrSet(sesh, OCI_HTYPE_SESSION, (void *)pwd, strlen(pwd), OCI_ATTR_PASSWORD, err);

//连接到数据库

if(OCISessionBegin(svc, err, sesh, OCI_SYSDBA))

{

printf( Connect to Oracle database fled.\n );

return -1;

}

//创建OCI语句句柄

OCIHandleAlloc(env, (void **) stmt, OCI_HTYPE_STMT, 0, NULL);

//执行SQL语句

OCIStmtPrepare(stmt, err, (unsigned char *) select * from emp , strlen( select * from emp ), OCI_NTV_SYNTAX, OCI_DEFAULT);

OCIStmtExecute(svc, stmt, err, 1, 0, NULL, NULL, OCI_DEFAULT);

//关闭OCI会话和服务上下文

OCISessionEnd(svc, err, sesh, OCI_COMMIT_ON_SUCCESS);

OCILogoff(svc, err);

return 0;

}


2.使用ODBC连接Oracle数据库
ODBC(Open Database Connectivity)是微软提出的一种通过API实现跨平台和多种数据库连接的标准接口。由于Oracle也提供了ODBC驱动程序,因此可以使用C语言通过ODBC连接Oracle数据库。使用ODBC连接Oracle数据库需要先安装ODBC驱动程序和unixODBC(Linux/Unix操作系统下的ODBC管理器)或Windows自带的ODBC管理器。以下是一个简单的使用ODBC连接Oracle数据库的示例程序:
```c#include
#include
#include
int mn(){
SQLHENV env; //ODBC环境句柄 SQLHDBC dbc; //ODBC数据库连接句柄
SQLHSTMT stmt; //ODBC语句句柄
//创建ODBC环境句柄 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
//创建ODBC数据库连接句柄 SQLAllocHandle(SQL_HANDLE_DBC, env, dbc);
SQLDriverConnect(dbc, NULL, (SQLCHAR *)"server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=orcl)));uid=scott;pwd=tiger;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
//创建ODBC语句句柄 SQLAllocHandle(SQL_HANDLE_STMT, dbc, stmt);
//执行SQL语句
SQLExecDirect(stmt, (SQLCHAR *)"select * from emp", SQL_NTS);
//关闭ODBC语句、数据库连接和环境句柄 SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc); SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;}

3.使用Pro*C连接Oracle数据库

Pro*C是Oracle提供的一个可以将C语言源程序和SQL语句混合在一起的预处理器,将混合后的源程序编译后可以链接到Oracle数据库。使用Pro*C连接Oracle数据库需要安装Pro*C和Oracle客户端。以下是一个简单的使用Pro*C连接Oracle数据库的示例程序:

`c

#include

#include

#include

#define VARCHAR2_CS (512)

struct EmpRec {

char empno[7+1];

char ename[40+1];

char job[30+1];

char mgr[7+1];

char hiredate[15+1];

char sal[7+1];

char comm[7+1];

char deptno[7+1];

};

char *username = scott

char *password = tiger

char *database = orcl

EXEC SQL BEGIN DECLARE SECTION;

char conStr[512];

struct EmpRec emp;

VARCHAR2 ename VARCHAR2_CS;

VARCHAR2 job VARCHAR2_CS;

VARCHAR2 hiredate VARCHAR2_CS;

EXEC SQL END DECLARE SECTION;

int mn()

{

//构建连接字符串

sprintf(conStr, user=%s password=%s dbname=%s , username, password, database);

//连接数据库

EXEC SQL CONNECT :conStr;

if(sqlca.sqlcode

{

printf( Connect to Oracle database fled.\n );

return -1;

}

//执行SQL语句

EXEC SQL SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno INTO :emp.empno,:ename,:job,:emp.mgr,:hiredate,:emp.sal,:emp.comm,:emp.deptno FROM emp WHERE empno = 7369

if(sqlca.sqlcode

{

printf( Exec SQL fled.\n );

return -1;

}

//将VARCHAR2类型转换为char类型

strncpy(emp.ename, (char *)ename.arr, (size_t)ename.len);

strncpy(emp.job, (char *)job.arr, (size_t)job.len);

strncpy(emp.hiredate, (char *)hiredate.arr, (size_t)hiredate.len);

emp.ename[ename.len] = \0

emp.job[job.len] = \0

emp.hiredate[hiredate.len] = \0

//打印查询结果

printf( empno=%s,ename=%s,job=%s,mgr=%s,hiredate=%s,sal=%s,comm=%s,deptno=%s\n ,

emp.empno, emp.ename, emp.job, emp.mgr, emp.hiredate, emp.sal, emp.comm, emp.deptno);

//断开数据库连接

EXEC SQL DISCONNECT;

return 0;

}


总结
本文介绍了使用OCI、ODBC和Pro*C三种方式使用C语言连接Oracle数据库的基本操作,希望能对需要使用C语言访问Oracle数据库的开发人员有所帮助。

我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 C语言连接Oracle数据库的方式简介(c 连接oracle方式)