Библиотека Oracle OCI C ++

0

Я пытаюсь перенести приложение из Solaris в Linux.

В Solaris я использовал компилятор Sun Studio C++, а в Linux я использовал компилятор Intel C++.

Теперь я сталкиваюсь со следующей проблемой при подключении к базе данных оракула:

 OCIDBConnection::OCIDBConnection(
 Environment& _env, const STRING& dbName, const STRING& user, const STRING& password) 
: env(_env)
{
 COUT<<"username "<<user<<ENDL;
 COUT<<"password "<<password<<ENDL;
 COUT<<"dbname "<<dbName<<ENDL;
 conn = env.createConnection(user, password, dbName);

}

Выход выводится следующим образом:

username roymustang9
password roymustang9
dbname roydb
[2013-11-12 15:39:23]>>FATAL<<: Login failed.

И при печати SQLException я нахожу:

ORA-12154: TNS:could not resolve the connect identifier specified который является смешным, поскольку имя существует в tnanames.ora, а сведения о подключении являются правильными. Infact, когда я жестко задаю значения, он проходит через штраф:

 OCIDBConnection::OCIDBConnection(
 Environment& _env, const STRING& dbName, const STRING& user, const STRING& password) 
 : env(_env)
{
 COUT<<"username "<<user<<ENDL;
 COUT<<"password "<<password<<ENDL;
 COUT<<"dbname "<<dbName<<ENDL;
 conn = env.createConnection("roymustang9", "roymustang9", "roydb");

}

STRING - это typedef, определяемый как std :: string. COUT и ENDL являются typedefs std :: cout и std :: endl.

Что мне здесь не хватает? http://docs.oracle.com/cd/B28359_01/appdev.111/b28390/reference014.htm#CHEEGFAI

  • 1
    Проверьте пробелы и непечатные символы в ваших строках.
Теги:
database
std

2 ответа

1
Лучший ответ

Кажется, что строка dbName неверна. Возможно, в конце она имеет символ новой строки. Попробуйте удалить его:

dbName.erase(std::remove(dbName.begin(), dbName.end(), '\n'), dbName.end());
  • 0
    Это было близко, но я не мог использовать стирание, так как переменная является константной строкой &. Я внес изменение, чтобы удалить последний символ перед его передачей этому методу.
  • 0
    Я рад, если я был полезным! (:
0

Имя dbname также может быть "roydb.world" или что-то в этом роде

  • сначала проверьте свои переменные env ORACLE_HOME и TNS_ADMIN
  • затем проверьте вывод из tnsping
  • затем проверьте, можете ли вы подключиться с помощью sqlplus

Ещё вопросы

Сообщество Overcoder
Наверх
Меню