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

📄 csybasequeryresult.cpp

📁 很好用的数据库连接组件
💻 CPP
字号:
/*=================================================================** 摘 要: 实现 sybase 驱动 sybase 查询结果集 sybase bcp 结果集==================================================================*/#include "stdafx.h"#include "CSqlCtlibrary.h"#include "CSybaseQueryResult.h"#include "comlog.h"//以下为CSYBASEResult的实现/*================================================================================** 函数名称: CSYBASEResult::CSYBASEResult** 主要功能: 构造实现** 入口参数: ** 序号 参数类型 参数名称 作用 说明** 1 CSYBASEDriver db 所基于的驱动 ** ** ** 出口参数:无** 修改记录:=================================================================================== */CSYBASEResult::CSYBASEResult (const CSYBASEDriver * db):CSqlResult (db)			//CSqlResult类的sybase实现,以db为驱动{  thePrivate = new CSYBASEResultPrivate ();	//构造查询结果集的私有类  //此查询结果集所基于的联接驱动是驱动参数db  thePrivate->i_driver_connection = db->thePrivate->i_driver_connection;  //记录此联接的 用户名、密码、server名、数据库名、应用名  strcpy (thePrivate->i_username, db->thePrivate->i_username);  strcpy (thePrivate->i_password, db->thePrivate->i_password);  strcpy (thePrivate->i_server, db->thePrivate->i_server);  strcpy (thePrivate->i_dbname, db->thePrivate->i_dbname);  strcpy (thePrivate->i_appname, db->thePrivate->i_appname);  thePrivate->syb_cmd_init ();	//初始化命令结构}CSYBASEResult::~CSYBASEResult (){  delete thePrivate;		//析构私有类  thePrivate = NULL;		//指针置空}/*================================================================================** 函数名称: CSYBASEResult::bind** 主要功能: 将输出绑定到内存区** 入口参数: ** 序号 参数类型 参数名称 作用 说明** 1 char (*)[] buf 记录内存指针 ** 2 int len 记录数组长度 ** 3 ** 出口参数: 类型: bool 作用:成功返回true 失败返回false** 修改记录:=================================================================================== */boolCSYBASEResult::bind (char (*buf)[SYBASE_MAX_COLUMN_LENGTH], int len){  if (thePrivate->syb_bind_data (buf, len) == SYBASE_RETURN_SUCCEED)	//调用私有类的syb_bind_data函数  {    return true;  }  else  {    return false;  }}/*================================================================================** 函数名称: CSYBASEResult::fetch** 主要功能: 索取一行数据** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** 出口参数: 类型: bool 作用:成功返回true 失败返回false** 修改记录=================================================================================== */boolCSYBASEResult::fetch (){  thePrivate->syb_fetch_data ();	////调用私有类的syb_fetch_data函数  if (thePrivate->i_return_code == CS_SUCCEED)  {    return true;  }  else  {    thePrivate->syb_end_cmd ();	    return false;  }}/*================================================================================** 函数名称: CSYBASEResult::data** 主要功能: 索取请求列的数据** 入口参数:** 序号 参数类型 参数名称 作用 说明** 1 int field 标记列 ** 出口参数: 类型: CVariant 作用:返回相应列值的CVariant类型** 修改记录=================================================================================== */CVariantCSYBASEResult::data (int field){  return CVariant (thePrivate->i_buf[field]);	//返回外部存储区的当前行相应列的数据}char *CSYBASEResult::stringData (int field){  return thePrivate->i_buf[field];	//返回外部存储区的当前行相应列的数据}intCSYBASEResult::intData (int field){  return atoi(thePrivate->i_buf[field]);	//返回外部存储区的当前行相应列的数据}/*================================================================================**说明:此函数在1.0版本未实现,待后续版本** 函数名称: CSYBASEResult::isNull** 主要功能: 请求列是否为空**** 入口参数:** 序号 参数类型 参数名称 作用 说明** 1 int field 标记列 ** 出口参数:** 类型: 作用** bool 为空返回true 否则返回false**** 修改记录=================================================================================== */boolCSYBASEResult::isNull (int field){  return true;}/*================================================================================** 函数名称: CSYBASEResult::reset** 主要功能: 提交查询**** 入口参数:** 序号 参数类型 参数名称 作用 说明** 1 string query 查询语句 ** 出口参数:** 类型: 作用** bool 为空返回true 否则返回false**** 修改记录=================================================================================== */bool CSYBASEResult::reset (const string & query){	int nReturn;		//TRACE("临时调试");		if (!driver ())	{		ERRLOG(NULL,0,"驱动未启动");		return false;	}	if (!driver ()->isOpen () || driver ()->isOpenError ())	{		ERRLOG(NULL,0,"驱动异常");		return false;	}	setActive (false);	LOG(NULL,0,"结束以前命令,以确保当前命令的正常发送");	thePrivate->syb_end_cmd ();	nReturn = thePrivate->syb_execute_cmd ((char *) query.c_str ());	if (nReturn != SYBASE_RETURN_SUCCEED)	{		ERRLOG(NULL,0,"调用私有类的执行函数失败,结束命令处理,返回失败");		thePrivate->syb_end_cmd ();		return false;	}	nReturn = thePrivate->syb_get_result ();	if(thePrivate->res_cmd_fail())	{		ERRLOG1(NULL,0,"[SQL:%s]获取结果集时执行函数失败,结束命令处理,返回失败",query.c_str ());		thePrivate->syb_end_cmd ();		return false;	}	if (thePrivate->res_cmd_have_result ())	{		LOG(NULL,0,"获取结果集时执行函数成功,命令返回结果集,得到结果集的描述");		nReturn = thePrivate->syb_get_describe ();		if (nReturn != SYBASE_RETURN_SUCCEED)		{			ERRLOG(NULL,0,"获取结果集的描述时执行函数失败,结束命令处理,返回失败");			thePrivate->syb_end_cmd ();			return false;		}		nReturn = thePrivate->syb_bind_data ();		if (nReturn != SYBASE_RETURN_SUCCEED)		{			ERRLOG(NULL,0,"绑定结果集时执行失败,结束命令处理,返回失败");			thePrivate->syb_end_cmd ();			return false;		}	}	else	{		LOG(NULL,0,"命令没有返回结果集,结束命令处理");		thePrivate->syb_end_cmd ();	}	setActive (true);	return true;}bool CSYBASEResult::multi_reset (const string & query){  int nReturn;  if (!driver ())		//驱动未启动    return false;  if (!driver ()->isOpen () || driver ()->isOpenError ())	//驱动打开且成功  {    return false;  }  setActive (false);		//未活动  thePrivate->syb_end_cmd ();	//将上一条命令结束(保证当前命令的正常发送)//  DB_TRACE (5, "SYBASE", ("%s\n", query.c_str ()));  nReturn = thePrivate->syb_execute_cmd ((char *) query.c_str ());	//调用私有类的执行函数  if (nReturn != SYBASE_RETURN_SUCCEED)  {    thePrivate->syb_end_cmd ();	//不成功作结束处理    return false;		//返回失败  }  setActive (true);		//执行命令成功,设为活动  return true;}int  CSYBASEResult::get_result(){  int nReturn;  while((nReturn = thePrivate->syb_get_result())==SYBASE_RETURN_SUCCEED)  {    if (thePrivate->res_cmd_have_result ())	//如果命令有返回结果集    {      #if 0      if(thePrivate->i_result_res_type!=SYBASE_STATUS_RESULT)      {        nReturn = thePrivate->syb_get_describe ();      }      else      {	thePrivate->i_nColumns=1;      }      #endif      nReturn = thePrivate->syb_get_describe ();//      DB_TRACE (5, "SYBASE", ("i_result_res_type:%d\n", thePrivate->i_result_res_type));      if(nReturn==SYBASE_RETURN_SUCCEED)      {        nReturn = thePrivate->syb_bind_data(thePrivate->i_buf);        break;      }      else      {        break;      }    }    else    {      continue;    }  }  if(nReturn==SYBASE_RETURN_SUCCEED)  {    switch (thePrivate->i_result_res_type)    {      case CS_STATUS_RESULT:        return SYBASE_STATUS_RESULT;      case CS_ROW_RESULT:        return SYBASE_ROW_RESULT;      case CS_COMPUTE_RESULT:        return SYBASE_COMPUTE_RESULT;      case CS_PARAM_RESULT:        return SYBASE_PARAM_RESULT;      default:        return SYBASE_RETURN_FAIL;    }  }  else  {    return SYBASE_RETURN_FAIL;   }}int  CSYBASEResult::get_columns(){  return thePrivate->i_nColumns;}bool  CSYBASEResult::cancel(bool bAll){    int nReturn;    if(bAll==true)    {      nReturn=thePrivate->syb_end_cmd (SYBASE_CANCEL_ALL);    }    else    {      nReturn=thePrivate->syb_end_cmd (SYBASE_CANCEL_CURR);    }    if(nReturn==SYBASE_RETURN_FAIL)    {      return false;     }    else    {      return true;     }}/*================================================================================**说明:此函数在1.0版本未实现,待后续版本** 函数名称: CSYBASEResult::size** 主要功能: 结果集大小**** 入口参数:无** 序号 参数类型 参数名称 作用 说明** ** 出口参数:** 类型: 作用** int 返回大小**** 修改记录=================================================================================== */intCSYBASEResult::size (){  return thePrivate->i_nRows;}/*================================================================================**说明:此函数在1.0版本未实现,待后续版本** 函数名称: CSYBASEResult::numRowsAffected ** 主要功能: 命令涉及的行数**** 入口参数:无** 序号 参数类型 参数名称 作用 说明** ** 出口参数:** 类型: 作用** int 返回涉及的行数**** 修改记录=================================================================================== */intCSYBASEResult::numRowsAffected (){  return thePrivate->i_nRows;}

⌨️ 快捷键说明

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