【发布时间】:2013-11-26 09:22:00
【问题描述】:
我正在尝试将应用程序从 Solaris 移植到 Linux。
在 Solaris 上,我使用 Sun Studio C++ 编译器,在 Linux 上,我使用 Intel C++ 编译器。
现在,我在连接到 oracle 数据库时遇到以下问题:
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 中,并且连接细节是正确的。事实上,当我对这些值进行硬编码时,一切正常:
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 是定义为 std::string 的 typedef。 COUT 和 ENDL 也是 std::cout 和 std::endl 的类型定义。
我在这里缺少什么? http://docs.oracle.com/cd/B28359_01/appdev.111/b28390/reference014.htm#CHEEGFAI
【问题讨论】:
-
检查字符串中的空格和不可打印的字符。
标签: c++ database linux oracle std