Ошибка OCILogon для среды OCI_UTF16 - PullRequest
2 голосов
/ 16 марта 2012

Функция OCILogon сообщает, что имя пользователя, пароль и параметры базы данных должны быть в кодировке UTF-16 в режиме среды OCI_UTF16. Я передаю эти параметры следующим образом,

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

Пожалуйста, дайте мне знать, как передать в формате UTF_16. Должен ли я использовать OCI_ATTR_CHARSET_ID и установить его в OCI_UTF16?

1 Ответ

1 голос
/ 16 марта 2012

Вы правы, документация Oracle гласит , что это:

Должно быть в кодировке UTF-16 в режиме среды OCI_UTF16.

Чтобы преобразовать это в UTF-16, они не говорят это здесь, но Oracle предоставляет простой макрос.Это должно быть так просто:

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

Документация также утверждает , что вы также можете использовать букву "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-битные библиотеки DLL (x86)и может быть легко перекомпилирован.Распаковать текущий архив (ocilib-xyz-windows.zip)
Копировать ocilib \ include \ ocilib.h
Копировать ocilib \ lib32 | 64 \ ocilib [x] .Lib
Копировать ocilib \ lib32 | 64 \оцилиб [х].Dll [...]
где [x] - скомпилированная версия OCILIB ('a'> -> ANSI, 'w' -> Unicode, 'm' -> Mixed)

...