【发布时间】:2014-03-28 13:09:10
【问题描述】:
我有以下代码用于连接到按预期工作的 Oracle-XE DB:
const char
*tns = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)
(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=XE)))",
*usr = "scott",
*pwd = "tiger";
err = OCIEnvNlsCreate(&envhp,OCI_THREADED, NULL, NULL, NULL, NULL, (size_t) 0
, (void**) NULL, 0, 0);
if(err != OCI_SUCCESS) return true;
err = OCIHandleAlloc(envhp, (void **) &errhp, OCI_HTYPE_ERROR, (size_t) 0
, (void **) NULL);
if(err != OCI_SUCCESS) return true;
err = OCIHandleAlloc(envhp,(void**)&authp, OCI_HTYPE_AUTHINFO,(size_t)0
, (void **) NULL);
if(err != OCI_SUCCESS) return true;
err = OCIAttrSet(authp, OCI_HTYPE_AUTHINFO,(void*) usr,
(ub4)strlen(usr),OCI_ATTR_USERNAME, (OCIError *)errhp);
if(err != OCI_SUCCESS) return true;
err = OCIAttrSet(authp, OCI_HTYPE_AUTHINFO,(void*) pwd,
(ub4)strlen(pwd),OCI_ATTR_PASSWORD, (OCIError *)errhp);
if(err != OCI_SUCCESS) return true;
err = OCISessionGet(envhp, errhp, &svchp, authp, (OraText*) tns,
(ub4)strlen(tns), NULL, 0, NULL, NULL, NULL, OCI_DEFAULT);
if(err != OCI_SUCCESS) {
checkerr(errhp, err, __LINE__);
return true;
}
现在我想支持 unicode,我更改了以下内容:
err = OCIEnvNlsCreate(&envhp,OCI_THREADED, NULL, NULL, NULL, NULL, (size_t) 0,
(void**) NULL, OCI_UTF16ID, OCI_UTF16ID);
现在我在 OCISessionGet 收到 ORA-12154,所以它不再连接。我做错了什么?
TIA
【问题讨论】:
标签: oracle unicode utf-16 oracle-call-interface