OCI UTF16环境的OCILogon失败

时间:2012-03-16 06:50:34

标签: c oracle10g oci

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?

1 个答案:

答案 0 :(得分:1)

你是对的,Oracle 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' - >混合)