【问题标题】:OCILogon failure for OCI_UTF16 enviornmentOCI UTF16 环境的 OCILogon 失败
【发布时间】:2012-03-16 06:50:33
【问题描述】:

OCILogon 函数表示用户名、密码和数据库参数在 OCI_UTF16 环境模式下必须采用 UTF-16 编码。我将这些参数传递如下,

OCILogon(p_env, p_err, &p_svc,"scott", 5,"tiger",5,"test" , 4);

请告诉我如何以 UTF_16 格式传递。我是否必须使用 OCI_ATTR_CHARSET_ID 并将其设置为 OCI_UTF16?

【问题讨论】:

    标签: c oracle10g oracle-call-interface


    【解决方案1】:

    你是对的,甲骨文documentation says 它:

    在 OCI_UTF16 环境模式下必须是 UTF-16 编码。

    为了将其转换为 UTF-16,他们在这里没有说,但 Oracle 提供了一个简单的宏。 应该就这么简单:

    rc = OCILogon(p_env, p_err, &p_svc, UTF16("scott"), 5, UTF16("tiger"), 5, UTF16("d458_nat"), 8);
    

    文档claims too,您也可以使用“L”来使用宽字符串文字,所以这也应该有效:

     rc = OCILogon(p_env, p_err, &p_svc, L"scott", 5, L"tiger", 5, L"d458_nat", 8);
    

    注意:您应该包含 ocilib.h 并与 ocilibw.Lib 链接,如 oci 文档所述:

    在 Microsoft Windows 上,提供了 32 位和 64 位 (x86) DLL,并且 可以很容易地重新编译。解压当前存档 (ocilib-xyz-windows.zip)
    复制 ocilib\include\ocilib.h
    复制 ocilib\lib32 |64\ocilib [x].Lib
    复制 ocilib\lib32|64\ocilib [x]。 DLL [...]
    其中 [x] 是 OCILIB 的编译版本('a'> -> ANSI,'w' -> Unicode,'m' -> Mixed)

    【讨论】:

    • 感谢您的建议。我尝试使用 UTF 宏转换为 Unicode,但它给了我链接错误。我是否必须添加任何库或包含头文件才能在我的代码中支持此宏。我的代码是使用 OCI.lib 构建的。
    • @user1268935 查看我的完整答案
    • 我已经包含了来自 ocilib-3.9.3-windows.zip.error LNK2019 的 DLL 和 LIB:未解析的外部符号 _UTF16 在函数 _main 致命错误 LNK1120 中引用:1 个未解析的外部
    • 我使用过 OCIlibm 库。我尝试将 L 用于宽字符串文字 rc = OCILogon(p_env, p_err, &p_svc, L"scott", 5, L"tiger", 5, L"d458_nat", 8);但是,没有为 UTF16 环境建立登录。对于 UTF16 宏,会抛出错误“'UTF16': identifier not found”。 rc = OCILogon(p_env, p_err, &p_svc, UTF16("scott"), 5, UTF16("tiger"), 5, UTF16("d458_nat"), 8);我还尝试了 OCICharSetToUnicode 和 OCINlsCharSetConvert 将数据转换为 UTF16 编码模式。但是,当 OCIEnvNlsCreate 创建 UTF16 enviornmant 模式时,我什至无法与数据库建立连接。@Coren
    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2021-05-10
    • 2014-10-28
    • 1970-01-01
    • 2015-04-05
    • 2021-10-10
    • 2019-04-20
    • 2020-11-26
    相关资源
    最近更新 更多