在开发应用时,经常需要连接数据库获取数据。而ODBC(Open Database Connectivity)作为一种通用数据库API,是很多语言的标准接口之一,也是使用较为广泛的数据库连接方式之一。在C语言中使用ODBC连接Oracle数据库,可以有效地完成数据存取任务。下面将介绍如何使用C语言的ODBC库连接Oracle数据库。
为了连接Oracle,首先需要知道Oracle的ODBC驱动程序名称和连接字符串。以32位Oracle客户端为例,ODBC驱动程序名称为“Oracle in OraClient11g_home1”,连接字符串格式为:
Driver={驱动程序名称}; Server={服务器端名/IP地址}:{端口号}/{服务名称}; Uid={用户名}; Pwd={密码};
具体来说,对于如下的Oracle数据库连接:
用户名:user 密码:password 数据库服务器IP地址:192.168.10.10 监听端口号:1521 服务名称:orcl
对应的ODBC连接字符串应该为:
"Driver={Oracle in OraClient11g_home1};Server=192.168.10.10:1521/orcl;Uid=user;Pwd=password;"
连接字符串确定后,就可以进行C语言的ODBC编程了。以下是一个简单的C语言程序示例:
#include <stdio.h>#include <sql.h>#include <sqlext.h>#define SQL_RESULT_LEN 240 #define SQL_RETURN_CODE_LEN 1000 int main(void) { SQLHENV env; SQLHDBC dbc; SQLHSTMT stmt; SQLRETURN ret; SQLCHAR sql[1000]; SQLCHAR chResult[SQL_RESULT_LEN + 1]; SQLCHAR chReturnCode[SQL_RETURN_CODE_LEN + 1]; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, SQL_IS_INTEGER); SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); SQLCHAR* szConnectStr = (SQLCHAR*)"Driver={Oracle in OraClient11g_home1};Server=192.168.10.10:1521/orcl;Uid=user;Pwd=password;"; SQLSMALLINT nConnectStrLen = (SQLSMALLINT)strlen((char*)szConnectStr); SQLCHAR chOutConnectStr[1024]; SQLSMALLINT nOutConnectStrLen; ret = SQLDriverConnect(dbc, NULL, szConnectStr, nConnectStrLen, chOutConnectStr, sizeof(chOutConnectStr), &nOutConnectStrLen, SQL_DRIVER_NOPROMPT); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); sprintf((char*)sql, "SELECT * FROM emp WHERE deptno = 20"); ret = SQLExecDirect(stmt, sql, SQL_NTS); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { SQLGetData(stmt, 1, SQL_C_CHAR, chResult, SQL_RESULT_LEN, NULL); while (SQLFetch(stmt) == SQL_SUCCESS) { SQLGetData(stmt, 1, SQL_C_CHAR, chResult, SQL_RESULT_LEN, NULL); printf("%s\n", chResult); } } else { SQLGetDiagRec(SQL_HANDLE_STMT, stmt, 1, NULL, NULL, chReturnCode, SQL_RETURN_CODE_LEN, NULL); printf("Error message: %s\n", chReturnCode); } SQLFreeHandle(SQL_HANDLE_STMT, stmt); } else { SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, NULL, NULL, chReturnCode, SQL_RETURN_CODE_LEN, NULL); printf("Error message: %s\n", chReturnCode); } SQLDisconnect(dbc); SQLFreeHandle(SQL_HANDLE_DBC, dbc); SQLFreeHandle(SQL_HANDLE_ENV, env); return 0; }
此程序首先调用了SQLAllocHandle函数创建了一个环境句柄和一个数据库连接句柄。然后使用SQLDriverConnect函数连接到Oracle数据库,并在连接成功后执行了一个简单的SELECT语句。最后,关闭了数据库连接并释放了相关资源。
以上就是如何使用C语言的ODBC库连接Oracle数据库的方法。在实际的开发过程中,可能需要根据具体情况做一些调整。希望以上内容对读者有所帮助。