0
失敗
我已經連接到正在按預期甲骨文XE DB下面的代碼:OCISessionGet使用Unicode
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
謝謝回覆。將字符串轉換爲UTF16後,我得到** Error - ORA-12169:TNS:作爲連接標識符給出的Net服務名稱太長**。對於UTF-8,上面給出的TNS字符串是相同的字節。有任何想法嗎? – alienfromouterspace
你如何做轉換? –
爲utf16使用erlang unicode:charcters_to_binary/3然後將字節字符串加載到tns字符數組 – alienfromouterspace