0

アプリケーションを 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

4

2 に答える 2

1

文字列 dbName の形式が正しくないようです..おそらく最後に改行文字があります. それを削除してみてください:

dbName.erase(std::remove(dbName.begin(), dbName.end(), '\n'), dbName.end());
于 2013-11-13T16:50:52.703 に答える
0

データベース名は、「roydb.world」またはそのようなものにすることもできます

  • 最初に環境変数ORACLE_HOMEを確認し、TNS_ADMIN
  • 次に、からの出力を確認しますtnsping
  • 次に、次を使用して接続できるかどうかを確認しますsqlplus
于 2013-11-13T16:51:26.347 に答える