cli SQLPutData() 返回不应出现的22001错!郁闷。
客户端: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 : String data right truncation."
可实际长度肯定没有超长。
是SQLParamData()只支持INFORMIX 7。31以上版本吗?还是cli存在一个bug?
盼高手前来分析解答!
以下是部分相关代码:
params.eDataType = stdtype;
params.value = value;
params.size = size;
params.written = 0;
params.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
¶ms, // 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(¶ms);
break;
}
//execute
rc = SQLExecDirect(m_hstmt, (SQLCHAR*)pSql, SQL_NTS);
if (rc != SQL_NEED_DATA) {
CheckError(rc, SQL_HANDLE_STMT, m_hstmt);
ez_pfree(¶ms);
APPEND_SQLRET_ERRMSG;
//
bSqlRet = FALSE;
break;
}
else {
SQLPOINTER ValuePtr;
SQLRETURNretcode;
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(¶ms);
APPEND_SQLRET_ERRMSG;
//
bSqlRet = FALSE;
break;
}
printf("pParam->written=%d\n", pParam->written);
pParam->written += nActualWrite;
continue;
}
else
break;
}
if (!bSqlRet) {
ez_pfree(¶ms);
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(¶ms);
APPEND_SQLRET_ERRMSG;
//
bSqlRet = FALSE;
break;
}
}
printf("--------------1\n");
APPEND_SQLRET_SUCCESS;
}
页:
[1]