当前位置: 技术问答>linux和unix
OCI 下的 OCIDefineByPos 乱码
来源: 互联网 发布时间:2016-04-07
本文导语: oci 连接 oracle但用OCIDefineByPos取出结果是乱码,其它获得字段名,字段长度都很正确!!部分代码如下: case SQLT_CHR: case SQLT_AFC: { pCurrField->Type = STRING_TYP...
oci 连接 oracle但用OCIDefineByPos取出结果是乱码,其它获得字段名,字段长度都很正确!!部分代码如下:
case SQLT_CHR: case SQLT_AFC:
{
pCurrField->Type = STRING_TYPE;
pCurrField->Size = InnerDataSize;
pCurrField->DataBuf = new ub1[pCurrField->Size+1];
ErrorNo = OCIDefineByPos(hStmt, &(pCurrField->Dfn), hErr, k,
pCurrField->DataBuf, pCurrField->Size+1, SQLT_STR,
(dvoid*)pCurrField->DataIndicator, (ub2*)0, (ub2*)0, OCI_DEFAULT);
checkError();
//ub2 csid = OCI_UCS2ID;
//ub2 csid = OCI_UTF16ID;
//ErrorNo = OCIAttrSet((dvoid *)(pCurrField->Dfn),OCI_HTYPE_DEFINE, (dvoid *)&csid,0,OCI_ATTR_CHARSET_ID,hErr);
break;
在 DATABUF中都到的值是乱码!!不知为何!!xiexie !!
case SQLT_CHR: case SQLT_AFC:
{
pCurrField->Type = STRING_TYPE;
pCurrField->Size = InnerDataSize;
pCurrField->DataBuf = new ub1[pCurrField->Size+1];
ErrorNo = OCIDefineByPos(hStmt, &(pCurrField->Dfn), hErr, k,
pCurrField->DataBuf, pCurrField->Size+1, SQLT_STR,
(dvoid*)pCurrField->DataIndicator, (ub2*)0, (ub2*)0, OCI_DEFAULT);
checkError();
//ub2 csid = OCI_UCS2ID;
//ub2 csid = OCI_UTF16ID;
//ErrorNo = OCIAttrSet((dvoid *)(pCurrField->Dfn),OCI_HTYPE_DEFINE, (dvoid *)&csid,0,OCI_ATTR_CHARSET_ID,hErr);
break;
在 DATABUF中都到的值是乱码!!不知为何!!xiexie !!
|
1 pCurrField->DataBuf = new ub1[pCurrField->Size+1];
后面应加上:
memset(pCurrField->DataBuf, 0x00, pCurrField->Size+1);
2 获取数据的函数返回值是否成功?
如果没有成功说明是初始new时的乱码,
成功了说明字符集不相同,导致显示乱码。
后面应加上:
memset(pCurrField->DataBuf, 0x00, pCurrField->Size+1);
2 获取数据的函数返回值是否成功?
如果没有成功说明是初始new时的乱码,
成功了说明字符集不相同,导致显示乱码。