アプリケーションを 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 の typedef でもあります。
ここで何が欠けていますか?http://docs.oracle.com/cd/B28359_01/appdev.111/b28390/reference014.htm#CHEEGFAI