Oracle8的OCI函数中参数使用的注意事项
在调用OCIStmtExcute()函数执行查询后,调用OCIDefineByPos(OCIStmt*stmtp,
OCIDefine **defnpp,
OCIError *errhp,
ub4 position,
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp, //指示器变量
ub2 *rlenp,
ub2 *rode,
ub4 mode)函数来为所选字段的字段值绑定输出变量时,如果不使用dvoid* indp 参数,即指示器参数,则在通过OCStmtExecute()函数或者OCIStmtFetch()函数来获取字段值时,函数的返回值有可能是-1,但是调用OCIErrorGet()函数来获取错误代码和错误信息时,错误代码ErrorCode为0并且错误信息为空,在使用AfxMessageBox()函数来获取错误信息时,会出现内存错误,如下图所示:
因此在调用OCIDefineByPos()函数时,要尽可能地使用dvoid*indp即指示器参数,指示器变
量的数据类型为 sb2 ,定义方式如下
sb2 pIndVal;或者 sb2 * pIndVal = new sb2;