免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2740 | 回复: 0
打印 上一主题 下一主题

cli SQLPutData() 返回不应出现的22001错!郁闷。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-10 23:49 |只看该作者 |倒序浏览
客户端:IBM INFORMIX-Client SDK 3.00.UC2
系统环境: linux 2.6.9-34.EL #1

服务端
INFORMIX-OnLine Version 7.22.UC2


SQLParamData()后调用SQLPutData() 总是返回
"ERROR: -11023:  22001 : [Informix][Informix ODBC Driver]String data right truncation."

可实际长度肯定没有超长。

是SQLParamData()只支持INFORMIX 7。31以上版本吗?还是cli存在一个bug?

盼高手前来分析解答!

以下是部分相关代码:


                            params[j].eDataType = stdtype;
                            params[j].value = value;
                            params[j].size = size;
                            params[j].written = 0;
                            params[j].field_max_size = maxsize;
                           
                            rc = SQLBindParameter(m_hstmt, (SQLUSMALLINT)(j+1),
                                                  SQL_PARAM_INPUT,
                                                  SQL_C_CHAR,
                                                  paramType,
                                                  0, //FIELD_MAX_SIZE,     // ColumnSize
                                                  0,                  // DecimalDigits
                                                  &params[j],         // ParameterValuePtr - context
                                                  0,                  // Buffer length
                                                  &StrLen_or_IndPtr);  //StrLen_or_IndPtr
                            if (CheckError(rc, SQL_HANDLE_STMT, m_hstmt)) {
                                    APPEND_SQLRET_ERRMSG;
                                //
                                bSqlRet = FALSE;
                                break;
                                }
                    }
                    if (!bSqlRet) {
                            ez_pfree(&params);
                            break;
                    }
                   
                    //execute
                        rc = SQLExecDirect(m_hstmt, (SQLCHAR*)pSql, SQL_NTS);
                        if (rc != SQL_NEED_DATA) {
                                CheckError(rc, SQL_HANDLE_STMT, m_hstmt);
                            ez_pfree(&params);
                            APPEND_SQLRET_ERRMSG;
                        //
                        bSqlRet = FALSE;
                        break;
                        }
                    else {
                            SQLPOINTER ValuePtr;
                            SQLRETURN  retcode;
                           
                            while((rc = SQLParamData(m_hstmt, &ValuePtr)) == SQL_NEED_DATA) {
                                        Param *pParam = (Param *)ValuePtr;
                                        ez_uint32_t nActualWrite;
                                        void *pBuf;
                                       
                                        while(1) {
                                                if (pParam->size - pParam->written > 0) {
                                                        nActualWrite = (pParam->size - pParam->written > 4096) ?
                                                                       4096 : pParam->size - pParam->written;
                                                        printf("value=[%s],len=%d\n", (char *)pParam->value + pParam->written, nActualWrite);
                                                        void *pp = (void *)((char *)pParam->value + pParam->written);
                                                        printf("pp=%s\n", pp);
                                                        retcode = SQLPutData(m_hstmt,
                                                                             pp,
                                                                             nActualWrite);
                                                        if (CheckError(retcode, SQL_HANDLE_STMT, m_hstmt)) {
                                                            ez_pfree(&params);
                                                            APPEND_SQLRET_ERRMSG;
                                                        //
                                                        bSqlRet = FALSE;
                                                        break;
                                                        }
                                                        printf("pParam->written=%d\n", pParam->written);
                                                        pParam->written += nActualWrite;
                                                        continue;
                                                }
                                                else
                                                        break;
                                        }
                                        if (!bSqlRet) {
                                            ez_pfree(&params);
                                            break;
                                    }
                                    printf("rc0000=%d\n", rc);
                                }
                                printf("--------------0\n");
                                if (rc != SQL_NO_DATA) {
                                        printf("rc=%d\n", rc);
                                        if (CheckError(rc, SQL_HANDLE_STMT, m_hstmt)) {
                                            ez_pfree(&params);
                                            APPEND_SQLRET_ERRMSG;
                                        //
                                        bSqlRet = FALSE;
                                        break;
                                        }
                                }
                            printf("--------------1\n");
                            APPEND_SQLRET_SUCCESS;
                    }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP