⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csqlctlibrary.cpp

📁 很好用的数据库连接组件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "CSqlCtlibrary.h"#include "comlog.h"#if 0CS_CONTEXT *  CSYBASEDriverPrivate::cs_context = NULL;	//将cs_context指针初始化为空int  CSYBASEDriverPrivate::cs_con_count = 0;		//将cs_con_count初始化为0#endif/*================================================================================** 函数名称: CSYBASEDriverPrivate::CSYBASEDriverPrivate** 主要功能: 构造实现** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:无** 修改记录:=================================================================================== */CSYBASEDriverPrivate::CSYBASEDriverPrivate (){	//将用户名、密码、服务器名、数据库名、应用名置为空 	strcpy (i_username, "");	strcpy (i_password, "");	strcpy (i_server, "");	strcpy (i_dbname, "");	strcpy (i_appname, "");	i_return_code = CS_FAIL;	//将上一次ct调用结果置为失败	# if defined(_REENTRANT)	ZcMutexLocker context_locker (zc_global_mutexpool->get ((void*)(&CSYBASEDriverPrivate::cs_context)));	# endif	#if 0	if (cs_con_count == 0)	//应用进程里第一次构造此类对象,需要初始化上下文结构	{		syb_ctx_init ();		//进行上下文结构初始化	}	++cs_con_count;		//连接个数加1	#endif};CSYBASEDriverPrivate::~CSYBASEDriverPrivate (){	# if defined(_REENTRANT)	ZcMutexLocker context_locker (zc_global_mutexpool->get ((void*)(&CSYBASEDriverPrivate::cs_context)));	# endif	#if 0	--cs_con_count;		//连接个数减1	if (cs_con_count == 0)	//如果是最后的类对象	{	syb_ctx_cleanup ();		//将上下文结构清除	}	#endif};/*================================================================================** 函数名称: CSYBASEDriverPrivate::syb_ctx_init** 主要功能: 初始化上下文结构** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明**  出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */int CSYBASEDriverPrivate::syb_ctx_init (){	CS_RETCODE retcode1;	CS_RETCODE retcode2;	CS_RETCODE retcode3;	CS_INT netio_type = CS_SYNC_IO;	//	TRACE("临时调试");	  	i_return_code = cs_ctx_alloc (SYBASE_CTLIB_VERSION, &cs_context);  	if (i_return_code != CS_SUCCEED)  	{		ERRLOG(NULL,0,"上下文结构分配失败");		return SYBASE_RETURN_FAIL;	}	LOG(NULL,0,"上下文结构分配成功,进行上下文结构的初始化"); 	i_return_code = ct_init (cs_context, SYBASE_CTLIB_VERSION);	if (i_return_code != CS_SUCCEED)	{		ERRLOG(NULL,0,"初始化上下文结构失败,清除上下文结构");		cs_ctx_drop (cs_context);		cs_context = NULL;		return SYBASE_RETURN_FAIL;	}	LOG(NULL,0,"上下文结构初始化成功");	#ifdef SYBASE_API_DEBUG	if (i_return_code == CS_SUCCEED)	{		retcode1 = ct_debug (cs_context, NULL, CS_SET_FLAG, CS_DBG_API_STATES, NULL,CS_UNUSED);		if (retcode1 != CS_SUCCEED)		{			//      DB_TRACE (6, "SYBASE", ("syb_ctx_init: ct_debug() failed\n"));		}	}	#endif	#if 0	if (i_return_code == CS_SUCCEED)	{		//注册共享库消息处理回掉		retcode2 = cs_config (cs_context,CS_SET,CS_MESSAGE_CB,(void*)syb_csmsg_cb,CS_UNUSED, NULL);		if (retcode2 != CS_SUCCEED)		{			//      DB_TRACE (6, "SYBASE", ("syb_ctx_init: ct_config(csmsg) failed\n"));		}	}	#endif	#if 0	if (i_return_code == CS_SUCCEED)	{		//配置同步输入输出方式		retcode3 = ct_config (cs_context, CS_SET, CS_NETIO, &netio_type,CS_UNUSED, NULL);		if (retcode3 != CS_SUCCEED)		{			//      DB_TRACE (6, "SYBASE", ("syb_ctx_init: ct_config(netio) failed\n"));		}	}	#endif	return SYBASE_RETURN_SUCCEED;	//成功返回SYBASE_RETURN_SUCCEED}/*================================================================================** 函数名称: CSYBASEDriverPrivate::syb_ctx_cleanup ** 主要功能: 清除上下文结构** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEDriverPrivate::syb_ctx_cleanup (){  CS_RETCODE retcode;  CS_INT exit_option;  i_return_code = CS_SUCCEED;  if(cs_context!=NULL)  {    i_return_code = ct_exit (cs_context, CS_UNUSED);	//正常退出处理    if (i_return_code != CS_SUCCEED)	//失败    {//      DB_TRACE (6, "SYBASE", ("syb_ctx_cleanup: ct_exit(CS_UNUSED) failed\n"));      i_return_code = ct_exit (cs_context, CS_FORCE_EXIT);	//强行退出      if (i_return_code != CS_SUCCEED)      {//        DB_TRACE (6, "SYBASE",("syb_ctx_cleanup: ct_exit(CS_FORCE_EXIT) failed\n"));      }    }    i_return_code = cs_ctx_drop (cs_context);	//清除上下文结构    cs_context = NULL;  }  if (i_return_code != CS_SUCCEED)	//清除失败  {//    DB_TRACE (6, "SYBASE", ("syb_ctx_cleanup: cs_ctx_drop() failed\n"));    return SYBASE_RETURN_FAIL;  }  return SYBASE_RETURN_SUCCEED;}/*================================================================================** 函数名称: CSYBASEDriverPrivate::syb_connect** 主要功能: 进行连接**** 入口参数:** 序号 参数类型 参数名称 作用 说明** 1 const char * username 用户名** 2 const char * password 密码** 3 const char * server server名** 4 const char * dbname 数据库名** 5 const char * appname 应用名** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL **** 修改记录=================================================================================== */intCSYBASEDriverPrivate::syb_connect (const char *username,const char *password,\		   const char *server,const char *dbname, const char *appname){	CS_INT len;	CS_RETCODE retcode;	CS_RETCODE query_code;	CS_INT restype;	CS_BOOL hafailover = CS_TRUE;//	TRACE("临时调试");		LOG5(NULL,0,"打开数据库驱动联结,参数:[%s],[%s],[%s],[%s],[%s]",\		username,password,server,dbname,appname);	strcpy (i_username, username);	strcpy (i_password, password);	strcpy (i_server, server);	strcpy (i_dbname, dbname);	strcpy (i_appname, appname);	if ((i_return_code == CS_SUCCEED) && (username != NULL))	{		LOG(NULL,0,"联接成功且用户名不为空,设置用户名");		if ((i_return_code = ct_con_props (i_driver_connection, CS_SET, CS_USERNAME, (CS_CHAR *) username, CS_NULLTERM, NULL)) != CS_SUCCEED)		{			ERRLOG(NULL,0,"设置用户名失败,异常返回");			return SYBASE_RETURN_FAIL;		}		else		{			LOG(NULL,0,"设置用户名成功");		}	}	if ((i_return_code == CS_SUCCEED) && (password != NULL))	{		LOG(NULL,0,"联接成功且密码不为空,设置密码");		if ((i_return_code = ct_con_props (i_driver_connection, CS_SET, CS_PASSWORD, (CS_CHAR *) password, CS_NULLTERM, NULL)) != CS_SUCCEED)		{			ERRLOG(NULL,0,"设置密码失败,异常返回");			return SYBASE_RETURN_FAIL;		}		else		{			LOG(NULL,0,"设置密码成功");		}	}	if ((i_return_code == CS_SUCCEED) && (appname != NULL))	{  		LOG(NULL,0,"联接成功且应用名不为空,设置应用名");		if ((retcode = ct_con_props (i_driver_connection, CS_SET, CS_APPNAME, (CS_CHAR *) appname, CS_NULLTERM, NULL)) != CS_SUCCEED)		{			ERRLOG(NULL,0,"设置应用名失败,异常返回");		}		else		{			LOG(NULL,0,"设置应用名成功");		}	}	#ifdef HAFAILOVER	if (i_return_code == CS_SUCCEED)	{		LOG(NULL,0,"联接成功,设置CS_HAFAILOVER属性");		if ((retcode = ct_con_props (i_driver_connection, CS_SET, CS_HAFAILOVER,				 &hafailover, CS_UNUSED, NULL)) != CS_SUCCEED)		{			ERRLOG(NULL,0,"设置CS_HAFAILOVER属性失败,异常返回");		}		else		{			LOG(NULL,0,"设置CS_HAFAILOVER属性成功");		}	}	#endif /* HAFAILOVER */	#if 1	if (i_return_code == CS_SUCCEED)	{		CS_BOOL b_mybool = CS_TRUE;		LOG(NULL,0,"联接成功,设置CS_BULK_LOGIN属性");		i_return_code = ct_con_props (i_driver_connection, CS_SET, CS_BULK_LOGIN, &b_mybool, CS_UNUSED, NULL);	//设置联接支持bcp		if (i_return_code != CS_SUCCEED)		{			ERRLOG(NULL,0,"设置CS_BULK_LOGIN属性失败,异常返回");			return SYBASE_RETURN_FAIL;		}		else		{			LOG(NULL,0,"设置CS_BULK_LOGIN属性成功");		}	}	#endif	#if 1		if (i_return_code == CS_SUCCEED)	{		LOG(NULL,0,"以上设置成功,则打开一个联接");		len = (server == NULL) ? 0 : CS_NULLTERM;		i_return_code = ct_connect (i_driver_connection, (CS_CHAR *) server, len);		if (i_return_code != CS_SUCCEED)		{			ERRLOG(NULL,0,"连接服务器失败,异常返回");			return SYBASE_RETURN_FAIL;		}		else		{			LOG(NULL,0,"连接服务器成功");		}	}	#endif	if ((dbname != NULL) && (strcmp (dbname, "") != 0))	{		LOG1(NULL,0,"数据库不为空,应用[%s]数据库,并返回应用结果",dbname);		int nRet = syb_use_db (dbname);		if(nRet==SYBASE_RETURN_FAIL)		{			ERRLOG1(NULL,0,"应用[%s]数据库,注销连接",dbname);			syb_con_cleanup();		}		return nRet;	}	else	{		LOG(NULL,0,"连接成功且无数据库设置");		return SYBASE_RETURN_SUCCEED;	}}/*================================================================================ ** 函数名称: CSYBASEDriverPrivate::syb_use_db ** 主要功能: 应用数据库 ** ** 入口参数: ** 序号 参数类型 参数名称 作用 说明 ** 1 const char * dbname 数据库名 ** ** ** ** ** 出口参数: ** 类型: 作用 ** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL ** ** 修改记录 =================================================================================== */intCSYBASEDriverPrivate::syb_use_db (const char *dbname){  CS_RETCODE retcode;  CS_RETCODE query_code;  CS_COMMAND *cmd;  CS_INT restype;  strcpy (i_dbname, dbname);	//记录数据库名  char cmdbuf[SYBASE_MAXSTRINGLEN];  if (dbname != NULL && (strcmp (dbname, "") != 0))	//数据库名不为空  {    retcode = ct_cmd_alloc (i_driver_connection, &cmd);	//分配命令结构    if (retcode != CS_SUCCEED)    {//      DB_TRACE (6, "SYBASE", ("ct_cmd_alloc failed\n"));      return SYBASE_RETURN_FAIL;    }    sprintf (cmdbuf, "use %s\n", dbname);	//构造应用数据库的命令    if ((retcode = ct_command (cmd, CS_LANG_CMD, cmdbuf, CS_NULLTERM, CS_UNUSED)) != CS_SUCCEED)	//准备命令失败    {//      DB_TRACE (6, "SYBASE", ("ct_command() failed\n"));      ct_cancel (NULL, cmd, CS_CANCEL_ALL);	//撤销命令      retcode = ct_cmd_drop (cmd);      cmd = NULL;      if (retcode != CS_SUCCEED)      {//	DB_TRACE (0, "SYBASE", ("ct_cmd_drop failed\n"));      }      return SYBASE_RETURN_FAIL;	//返回失败    }    //准备命令成功,往下执行    if ((retcode = ct_send (cmd)) != CS_SUCCEED)	//发送失败    {//      DB_TRACE (6, "SYBASE", ("ct_send() failed\n"));      ct_cancel (NULL, cmd, CS_CANCEL_ALL);      retcode = ct_cmd_drop (cmd);	//清除命令结构      cmd = NULL;      if (retcode != CS_SUCCEED)      {//	DB_TRACE (0, "SYBASE", ("ct_cmd_drop failed\n"));      }      return SYBASE_RETURN_FAIL;	//返回失败    }    query_code = CS_SUCCEED;    while ((retcode = ct_results (cmd, &restype)) == CS_SUCCEED)	//得到结果集    {      switch ((int) restype)      {      case CS_CMD_SUCCEED:      case CS_CMD_DONE:	break;			//成功跳出      case CS_CMD_FAIL:      default:	query_code = CS_FAIL;	//失败置失败标志	break;      }    }    //lyg    //ct_cancel (NULL, cmd, CS_CANCEL_ALL);	//用取消后续动作对命令作结束处理    retcode = ct_cmd_drop (cmd);	//清除命令结构    cmd = NULL;    if (retcode != CS_SUCCEED)    {//      DB_TRACE (0, "SYBASE", ("ct_cmd_drop failed\n"));    }    if (query_code != CS_SUCCEED)	//得到结果集失败    {      return SYBASE_RETURN_FAIL;	//返回失败    }    else			//得到结果集成功    {      return SYBASE_RETURN_SUCCEED;	//返回成功    }  }  else				//数据库名为空  {    return SYBASE_RETURN_FAIL;	//返回失败  }}/*================================================================================** 函数名称: CSYBASEDriverPrivate::syb_con_init** 主要功能: 初始化联接结构** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -