📄 csybasequeryresult.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 + -