📄 csqlctlibrary.cpp
字号:
int CSYBASEDriverPrivate::syb_con_init (){// TRACE("临时调试"); LOG(NULL,0,"上下文结构初始化......"); syb_ctx_init (); CS_RETCODE retcode1; CS_RETCODE retcode2; i_driver_connection = NULL; LOG(NULL,0,"分配联接结构......"); i_return_code = ct_con_alloc (cs_context, &(i_driver_connection)); if (i_return_code != CS_SUCCEED) { ERRLOG(NULL,0,"分配联接结构失败,异常返回"); return SYBASE_RETURN_FAIL; } LOG(NULL,0,"分配联接结构成功"); # if !defined(_REENTRANT) /* ** Install client and server message handlers. */ if (i_return_code == CS_SUCCEED) { LOG(NULL,0,"注册客户端回调......"); retcode1 = ct_callback (NULL, i_driver_connection, CS_SET,\ CS_CLIENTMSG_CB, (void*)syb_clientmsg_cb); if (retcode1 != CS_SUCCEED) { ERRLOG(NULL,0,"注册客户端回调失败"); } } if (i_return_code == CS_SUCCEED) { LOG(NULL,0,"注册服务端回调......"); retcode2 = ct_callback (NULL, i_driver_connection, CS_SET, CS_SERVERMSG_CB, (void*)syb_servermsg_cb); //注册服务器端回调 if (retcode2 != CS_SUCCEED) { ERRLOG(NULL,0,"注册服务端回调失败"); } } # endif return SYBASE_RETURN_SUCCEED; //返回成功}/*================================================================================** 函数名称: CSYBASEDriverPrivate::syb_con_cleanup** 主要功能: 清除联接结构** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEDriverPrivate::syb_con_cleanup (){ CS_RETCODE retcode; CS_INT close_option; i_return_code=CS_SUCCEED; if(i_driver_connection!=NULL) { i_return_code = ct_close (i_driver_connection, CS_UNUSED); //正常关闭联接 if (i_return_code != CS_SUCCEED) //关闭失败 {// DB_TRACE (5, "SYBASE", ("syb_con_cleanup:ct_close(CS_UNUSED) failed\n")); i_return_code = ct_close (i_driver_connection, CS_FORCE_CLOSE); //强制关闭 if (i_return_code != CS_SUCCEED) //强制关闭失败 {// DB_TRACE (5, "SYBASE",("syb_con_cleanup: ct_close(CS_FORCE_CLOSE) failed\n")); } } i_return_code = ct_con_drop (i_driver_connection); //清除联接 i_driver_connection = NULL; } if (i_return_code != CS_SUCCEED) //不成功 {// DB_TRACE (5, "SYBASE", ("syb_con_cleanup: ct_con_drop() failed\n")); } return syb_ctx_cleanup (); //将上下文结构清除}//构造函数,进行初始化CSYBASEResultPrivate::CSYBASEResultPrivate ():CSYBASEDriverPrivate (){ i_buf = NULL; //外部缓冲指针置为空 i_nRows = -1; //行数为-1 i_nColumns = -1; //列数为-1 for (int i = 0; i < SYBASE_MAX_TABLE_COLUMNS + 1; i++) { strcpy (i_cRowBuf[i], ""); //将内部缓冲清空 memset (&i_RowDesc[i], 0, CS_SIZEOF (i_RowDesc[i])); //将列描述数组清空 }}CSYBASEResultPrivate::~CSYBASEResultPrivate (){ syb_cmd_cleanup (); //清除命令结构}boolCSYBASEResultPrivate::res_cmd_succeed (){ if (i_result_res_type == CS_CMD_SUCCEED) //如果命令成功 { return true; } else { return false; }}bool CSYBASEResultPrivate::res_cmd_have_result (){ if (i_result_res_type == CS_STATUS_RESULT || i_result_res_type == CS_PARAM_RESULT || i_result_res_type == CS_ROW_RESULT || i_result_res_type == CS_CURSOR_RESULT || i_result_res_type == CS_COMPUTE_RESULT) //如果命令返回结果 { return true; } else { return false; }}boolCSYBASEResultPrivate::res_cmd_fail (){ if (i_result_res_type == CS_CMD_FAIL) //如果命令失败 { return true; } else { return false; }}boolCSYBASEResultPrivate::res_cmd_done (){ if (i_result_res_type == CS_CMD_DONE) //如果命令结束 { return true; } else { return false; }}boolCSYBASEResultPrivate::res_succeed (){ if (i_result_ret_code == CS_SUCCEED) //如果结果集返回成功 { return true; } else { return false; }}boolCSYBASEResultPrivate::res_end (){ if (i_result_ret_code == CS_END_RESULTS) //如果结果集结束 { return true; } else { return false; }}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_cmd_init** 主要功能: 初始化命令结构** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEResultPrivate::syb_cmd_init (){ i_return_code = ct_cmd_alloc (i_driver_connection, &i_cs_cmd); //分配命令结构 if (i_return_code != CS_SUCCEED) //不成功 {// DB_TRACE (5, "SYBASE", ("ct_cmd_alloc failed\n")); return SYBASE_RETURN_FAIL; //返回失败 }// DB_TRACE (5, "SYBASE", ("ct_cmd_alloc ok\n")); return SYBASE_RETURN_SUCCEED; //返回成功}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_cmd_cleanup** 主要功能: 清除命令结构** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEResultPrivate::syb_cmd_cleanup (){ if (i_cs_cmd != NULL) { i_return_code = ct_cancel (NULL, i_cs_cmd, CS_CANCEL_ALL); //取消命令的后续动作 if (i_return_code != CS_SUCCEED) {// DB_TRACE (5, "SYBASE", ("ct_cancel failed\n")); } i_return_code = ct_cmd_drop (i_cs_cmd); //清除命令结构 i_cs_cmd = NULL; if (i_return_code != CS_SUCCEED) {// DB_TRACE (5, "SYBASE", ("ct_cmd_drop failed\n")); return SYBASE_RETURN_FAIL; //返回失败 }// DB_TRACE (5, "SYBASE", ("ct_cmd_drop ok\n")); } return SYBASE_RETURN_SUCCEED; //返回失败}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_get_describe** 主要功能: 得到结果集的描述** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEResultPrivate::syb_get_describe (){ CS_INT num_cols; CS_INT i; CS_INT j; CS_INT rows_read; CS_INT disp_len; i_row_count_read = 0; i_nColumns = -1; i_return_code = ct_res_info (i_cs_cmd, CS_NUMDATA, &i_nColumns, CS_UNUSED, NULL); //得到结果集的列数 if (i_return_code != CS_SUCCEED) //失败 {// DB_TRACE (6, "SYBASE", (" ct_res_info() failed\n")); return SYBASE_RETURN_FAIL; //返回失败 } if (i_nColumns <= 0) //得到列数小于0 {// DB_TRACE (6, "SYBASE", ("ct_res_info() returned zero columns\n")); return SYBASE_RETURN_FAIL; //返回失败 } for (i = 0; i < i_nColumns; i++) //每一列进行 { i_return_code = ct_describe (i_cs_cmd, (i + 1), &i_RowDesc[i + 1]); //得到当前列的描述信息 if (i_return_code != CS_SUCCEED) //失败 {// DB_TRACE (6, "SYBASE", ("ct_describe() failed\n")); return SYBASE_RETURN_FAIL; //返回失败 } } return SYBASE_RETURN_SUCCEED; //返回成功}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_bind_data** 主要功能: 绑定结果集** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** 1 (char*)[] buf 绑定的输出缓冲 为空绑定到内部** 2 int nBufNum 缓冲大小 ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEResultPrivate::syb_bind_data (char (*result_buf)[SYBASE_MAX_COLUMN_LENGTH], int nBufNum){ CS_DATAFMT datafmt[SYBASE_MAX_TABLE_COLUMNS + 1]; //列描述结构的数组 int i; for (i = 0; i < SYBASE_MAX_TABLE_COLUMNS; i++) //针对整个结构数组的每一项 { memset (&datafmt[i + 1], 0, CS_SIZEOF (datafmt[i + 1])); //初始化结构项 } for (i = 0; i < i_nColumns; i++) //针对每一列 { datafmt[i + 1].maxlength = SYBASE_MAX_COLUMN_LENGTH; //列的最大长度设为SYBASE_MAX_COLUMN_LENGTH datafmt[i + 1].datatype = CS_CHAR_TYPE; //数据类型设为字符串 datafmt[i + 1].format = CS_FMT_NULLTERM; //格式设为null结束的字符串 if (result_buf == NULL) //为NULL绑定到内部 { i_buf = i_cRowBuf; i_return_code = ct_bind (i_cs_cmd, (i + 1), &datafmt[i + 1], &i_cRowBuf[i + 1], NULL, NULL); //绑定到内部缓冲i_cRowBuf } else { i_buf = result_buf; //记录外部缓冲地址 i_return_code = ct_bind (i_cs_cmd, (i + 1), &datafmt[i + 1], &result_buf [ i + 1], NULL, NULL); //进行绑定 } if (i_return_code != CS_SUCCEED) //绑定失败 {// DB_TRACE (6, "SYBASE", ("ct_bind() failed\n")); return SYBASE_RETURN_FAIL; //返回失败 } } return SYBASE_RETURN_SUCCEED; //返回成功}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_fetch_data** 主要功能: 索取一行数据** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */intCSYBASEResultPrivate::syb_fetch_data (){ i_return_code = ct_fetch (i_cs_cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, (CS_INT *) NULL); //调用sybase库函数索取数据 if (i_return_code == CS_SUCCEED) //成功 { ++i_row_count_read; //已读行数加1// DB_TRACE (6, "SYBASE", ("i_row_count_read:%d\n", i_row_count_read)); return SYBASE_RETURN_SUCCEED; //返回成功 } else if (i_return_code == CS_END_DATA) //索取完毕 { //syb_end_cmd (SYBASE_CANCEL_CURR); //结束处理// DB_TRACE (6, "SYBASE", ("ct_fetch() end\n")); return SYBASE_RETURN_FAIL; //返回失败 } else //失败 { //syb_end_cmd (SYBASE_CANCEL_CURR); //结束处理// DB_TRACE (6, "SYBASE", ("ct_fetch() fail\n")); return SYBASE_RETURN_FAIL; //返回失败 }}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_execute_cmd** 主要功能: 执行命令** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** 1 char* cmdbuf 传递命令 ** ** ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */int CSYBASEResultPrivate::syb_execute_cmd (char *cmdbuf){// TRACE("临时调试"); if ((i_return_code = ct_command (i_cs_cmd, CS_LANG_CMD, cmdbuf, CS_NULLTERM, CS_UNUSED)) != CS_SUCCEED) { ERRLOG(NULL,0,"准备命令失败,异常返回"); return SYBASE_RETURN_FAIL; } i_return_code = ct_send (i_cs_cmd); if (i_return_code != CS_SUCCEED) { ERRLOG(NULL,0,"命令发送失败,异常返回"); return SYBASE_RETURN_FAIL; } return SYBASE_RETURN_SUCCEED; //返回成功}/*================================================================================** 函数名称: CSYBASEResultPrivate::syb_end_cmd** 主要功能: 命令结束处理** 入口参数: 无 ** 序号 参数类型 参数名称 作用 说明** 1 int nOpt 标示结束当前命令还是整个联接的命令 ** 出口参数:** 类型: 作用** int 成功返回SYBASE_RETURN_SUCCEED,失败返回SYBASE_RETURN_FAIL** 修改记录:=================================================================================== */int CSYBASEResultPrivate::syb_end_cmd (int nAllorCurr,int nConorCmd){ CS_RETCODE retcode;// TRACE("临时调试"); if (nConorCmd == SYBASE_CANCEL_COMMAND) { if(nAllorCurr==SYBASE_CANCEL_ALL) { retcode = ct_cancel (NULL, i_cs_cmd, CS_CANCEL_ALL); //结束当前命令 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -