c 连接远程oracle数据库

在C语言中,连接远程Oracle数据库是一个非常常见的需求。无论是对于企业内部的数据应用还是外部的客户端软件开发,都需要进行数据库的连接操作。本文就将介绍如何使用C语言连接远程Oracle数据库,并进行数据操作。

在连接远程Oracle数据库前,需要提前安装好Oracle客户端。在此不再多做赘述。下面就进入主题,介绍连接操作。

#include#include#includeint main() { OCIEnv* envhpp=NULL; OCIError* errhpp=NULL; OCISvcCtx* svchpp=NULL; OCIStmt* stmthpp=NULL; OCIServer* srvhpp=NULL; sword ret=0; //初始化环境 ret = OCIEnvCreate(&envhpp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL); if (ret != OCI_SUCCESS) { printf("OCIEnvCreate error\n"); return -1; } //获取错误句柄 OCIHandleAlloc(envhpp, (void**)&errhpp, OCI_HTYPE_ERROR, 0, NULL); if (errhpp == NULL) { printf("OCIHandleAlloc errhpp error\n"); return -1; } //获取服务器句柄 OCIHandleAlloc(envhpp, (void**)&srvhpp, OCI_HTYPE_SERVER, 0, NULL); if (srvhpp == NULL) { printf("OCIHandleAlloc srvhpp error\n"); return -1; } //创建服务器句柄 ret = OCIServerAttach(srvhpp, errhpp, (text *)"ip", strlen("ip"), OCI_DEFAULT); if (ret != OCI_SUCCESS) { printf("OCIServerAttach error\n"); return -1; } //创建服务器上下文句柄 OCIHandleAlloc(envhpp, (void**)&svchpp, OCI_HTYPE_SVCCTX, 0, NULL); if (svchpp == NULL) { printf("OCIHandleAlloc svchpp error\n"); return -1; } //设置服务上下文服务句柄 ret = OCIAttrSet(svchpp, OCI_HTYPE_SVCCTX, srvhpp, 0, OCI_ATTR_SERVER, errhpp); if (ret != OCI_SUCCESS) { printf("OCIAttrSet svchpp error\n"); return -1; } //创建语句句柄 OCIHandleAlloc(envhpp, (void**)&stmthpp, OCI_HTYPE_STMT, 0, NULL); if (stmthpp == NULL) { printf("OCIHandleAlloc stmthpp error\n"); return -1; } //执行语句 ret = OCIStmtExecute(svchpp, stmthpp, errhpp, 0, 0, NULL, NULL, OCI_COMMIT_ON_SUCCESS); if (ret != OCI_SUCCESS) { printf("OCIStmtExecute error\n"); return -1; } //释放句柄 OCIHandleFree(envhpp, errhpp, OCI_HTYPE_ERROR); OCIHandleFree(envhpp, srvhpp, OCI_HTYPE_SERVER); OCIHandleFree(envhpp, svchpp, OCI_HTYPE_SVCCTX); OCIHandleFree(envhpp, stmthpp, OCI_HTYPE_STMT); OCITerminate(OCI_DEFAULT); return 0; }