c 数据库oracle数据库连接

Oracle数据库是一种广泛使用的关系型数据库管理系统(RDBMS),C编程语言和Oracle数据库连接是很常见的技术组合。在本文中,我们将探讨如何使用C语言来连接Oracle数据库。

在连接Oracle数据库之前,需要在Oracle客户端连接中配置一个数据源(DSN)。这通常是在Windows控制面板中的ODBC数据源管理员中完成的。在这里,我们将使用Visual Studio 2019作为我们的开发工具。进入Visual Studio,打开命令提示符,键入以下命令:

#include "stdio.h" #include "stdlib.h" #include "oci.h" int main() { OCIEnv *envhp; OCIError *errhp; OCIServer *srvhp; OCISession *authp; OCISvcCtx *svchp; text *uid = (text *)"username"; text *pwd = (text *)"password"; text *dsn = (text *)"TNSNameAlias"; if (OCIInitialize(OCI_THREADED, (dvoid *)0, 0, 0, 0) != OCI_SUCCESS) { printf("Failed to initialize OCI.\n"); return -1; } if (OCIEnvCreate(&envhp, OCI_DEFAULT, (dvoid *)0, (dvoid * (*)(dvoid *, size_t))0, (dvoid * (*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *))0, 0, (dvoid **)0) != OCI_SUCCESS) { printf("Failed to create OCI environment.\n"); return -1; } if (OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, 0, (dvoid **)0) != OCI_SUCCESS) { printf("Failed to allocate OCI error handle.\n"); return -1; } if (OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, (dvoid **)0) != OCI_SUCCESS) { printf("Failed to allocate OCI server handle.\n"); return -1; } if (OCIHandleAlloc((dvoid *)envhp, (dvoid **)&authp, OCI_HTYPE_SESSION, 0, (dvoid **)0) != OCI_SUCCESS) { printf("Failed to allocate OCI session handle.\n"); return -1; } if (OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX, 0, (dvoid **)0) != OCI_SUCCESS) { printf("Failed to allocate OCI context handle.\n"); return -1; } if (OCIServerAttach(srvhp, errhp, (text *)dsn, strlen((char *)dsn), OCI_DEFAULT) != OCI_SUCCESS) { printf("Failed to attach OCI server.\n"); return -1; } if (OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT) != OCI_SUCCESS) { printf("Failed to begin OCI session.\n"); return -1; } if (OCIAttrSet((dvoid *)svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp, (ub4)0, OCI_ATTR_SERVER, errhp) != OCI_SUCCESS) { printf("Failed to set OCI server attributes.\n"); return -1; } if (OCIAttrSet((dvoid *)authp, OCI_HTYPE_SESSION, (dvoid *)uid, (ub4)strlen((char *)uid), OCI_ATTR_USERNAME, errhp) != OCI_SUCCESS) { printf("Failed to set OCI username attribute.\n"); return -1; } if (OCIAttrSet((dvoid *)authp, OCI_HTYPE_SESSION, (dvoid *)pwd, (ub4)strlen((char *)pwd), OCI_ATTR_PASSWORD, errhp) != OCI_SUCCESS) { printf("Failed to set OCI password attribute.\n"); return -1; } if (OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT) != OCI_SUCCESS) { printf("Failed to begin OCI session.\n"); return -1; } printf("Successfully connected to Oracle database.\n"); return 0; }