#define __PROC_C__#include "db.h"#undef __PROC_C__ /* 包含SQL通讯区变量 */EXEC SQL INCLUDE sqlca; /* RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源 */ EXEC ORACLE OPTION (RELEASE_CURSOR = YES); /* 全局说明段 */EXEC SQL BEGIN DECLARE SECTION; VARCHAR db_name[32 + 1]; VARCHAR db_user[32 + 1]; VARCHAR db_pass[32 + 1]; VARCHAR db_name2[32 + 1]; VARCHAR db_user2[32 + 1]; VARCHAR db_pass2[32 + 1]; VARCHAR db_link2[32 + 1];EXEC SQL END DECLARE SECTION; /* 数据库是否连接成功的标志 */int g_DBConnected = 0;int g_DBConnected2 = 0; /* 连接数据库 */int DBConnect(const char *DBName, const char *DBUser, const char *DBPass){ /* 局部sqlca说明 */ struct sqlca sqlca; /* 返回值定义 */ int ret; /* 将形式参数赋到全局说明段中相应变量中 */ memset(db_name.arr, 0, sizeof(db_name.arr)); strncpy(db_name.arr, DBName, sizeof(db_name.arr) - 1); db_name.len = strlen(db_name.arr); memset(db_user.arr, 0, sizeof(db_user.arr)); strncpy(db_user.arr, DBUser, sizeof(db_user.arr) - 1); db_user.len = strlen(db_user.arr); memset(db_pass.arr, 0, sizeof(db_pass.arr)); strncpy(db_pass.arr, DBPass, sizeof(db_pass.arr) - 1); db_pass.len = strlen(db_pass.arr); /* 执行连接数据库的SQL语句 */ EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name; /* 判断SQL语句执行结果 */ if (sqlca.sqlcode == 0) { g_DBConnected = 1; ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } return ret;} /* 重连数据库 */int DBReconnect(){ /* 局部sqlca说明 */ struct sqlca sqlca; /* 返回值定义 */ int ret; /* 执行连接数据库的SQL语句 */ EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name; /* 判断SQL语句执行结果 */ if (sqlca.sqlcode == 0) { g_DBConnected = 1; ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } return ret;} /* 断开数据库连接 */int DBDisconnect(){ /* 局部sqlca说明 */ struct sqlca sqlca; /* 返回值定义 */ int ret; /* 释放操作 */ EXEC SQL COMMIT WORK RELEASE; /* 判断SQL语句执行结果 */ if (sqlca.sqlcode == 0) { ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } g_DBConnected = 0; return ret;}