本文共 6722 字,大约阅读时间需要 22 分钟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | EOpCode CMySqlHandlerImp::GoOnProcRes(BOOL32 bIsClear /* = false */ ) { // 只要结果集不为 NULL 就释放掉 if (NULL != m_pRes) { mysql_free_result(m_pRes); // clear preceding query result m_pRes = NULL; } ... // 在 bIsClear 为 True 的情况下,此处相当于将前次请求的全部结果集清除掉 while (TRUE) { ... // 读取下一个查询结果 nRet = mysql_next_result(m_pMySql); ... // 启动一个逐行的检索 m_pRes = mysql_use_result(m_pMySql); // 这里使用的 mysql_use_result ... if (!bIsClear) { // 绑定结果集到自定义的保存结果集的容器中 m_pcMySqlRsImp->BindRs(m_pMySql, m_pRes, m_pcCbFunc, m_pcContext); return EOpCode_FindRs; } mysql_free_result(m_pRes); m_pRes = NULL; } } BOOL32 CMySqlRsImp::BindRs(MYSQL *pMySql, MYSQL_RES *pRes, DBCbFunc pcCbFunc, void *pcContext) { m_pMySql = pMySql; m_pRes = pRes; m_pcCbFunc = pcCbFunc; m_pcContext = pcContext; m_wColNum = (u16)mysql_field_count(pMySql); m_pField = mysql_fetch_fields(m_pRes); // 这和 mysql_use_result 一起使用可以么 m_bEnd = FALSE; //产生记录集,修改结束标志位 return TRUE; } BOOL32 CMySqlHandlerImp::ExecSql(IN LPCSTR szsql, OUT CDBRsImp *pcRecordSet, u16* pwErrId /* = NULL*/ ) { ... // 清除前次请求的全部结果集 GoOnProcRes(TRUE); // 执行新的查询操作 s32 nRet = mysql_real_query(m_pMySql, szsql, strlen (szsql)+1); // 将外部指定的 buffer 进行绑定 m_pcMySqlRsImp = (CMySqlRsImp *)pcRecordSet; // 获取此次请求的结果集 if (GoOnProcRes() == EOpCode_FindRs) { u32 dwEndTime = OspTickGet(); if (NULL != pwErrId) { *pwErrId = DB_EXEC_ERRID_SUCC; } return TRUE; } return FALSE; } |
转载地址:http://pnmfl.baihongyu.com/