5

ODP.NET dll を使用する C# のプログラムがあります。

oci.dll, ociw32.dll, Oracle.DataAccess.dll,
orannzsbb11.dll, oraocci11.dll, oraociicus11.dll,
OraOps11w.dll. 

私は2台のコンピュータを持っています。1 つ目は ODAC パッケージ全体がインストールされている場合、2 つ目はそのパッケージがインストールされていない場合です。しかし、exe ディレクトリに必要なすべての dll があるので、ODAC は問題ではないと思います。

これらのコンピューターの違いは、TNSNAMESファイルへのパスです。

First: C:\app\OraHome_1\Network\admin\
Second: C:\Oracle\product\11.2.0\client_1\network\admin

最初のコンピューターでは、プログラムは正常に動作します。しかし、同じ接続文字列を持つ2番目のものでは、エラーが発生します:

cannot open connection (ORA-12154)

SQL Plus を使用すると、両方のコンピューターに接続できます。プログラムにファイルへの適切なパスを表示するにはどうすればよいtnsnames.oraですか?

4

3 に答える 3

13

TNS_ADMIN環境変数はプログラムで設定できます。手順については、このページを参照してください。TNS_NAMES.ORAそれは、特定のファイル に変更したい場合です。Oracle Client は引き続きクライアント マシンにインストールする必要があります。

ConnectionStringsから- TNS を使用しない場合:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;


編集: 3番目のオプションを追加

クライアントのファイルの現在の場所を見つけるのに役立つこの質問を参照してくださいTNS_NAMES.ORA-必要に応じて開いて変更できます(存在しない場合は独自の接続を追加します)

于 2012-05-16T12:33:58.940 に答える
3

TNSNames ファイルのパスを気にする必要はありません。インストールすると、ライブラリ自体によって自動的に検出されます。これが重要なポイントです。プロジェクト内で dll を配布するだけでは十分ではありません。ODP.Net を使用する必要があるマシンに ODP.Net をインストールする必要があります。実際には、インストールによっていくつかのレジストリ エントリが作成され、そのうちの 1 つが適切な oracle ディレクトリを指します (ライブラリは必要に応じて tnsnames を見つけることができます)。

Morover、誰かが指摘したように、tnsnams ファイルはまったく必要ありません。必要なすべてを接続文字列内に記述できます。私の環境で使用しているものは次のとおりです。

Data Source= (DESCRIPTION =
      (ENABLE = BROKEN)
      (ADDRESS_LIST =
      (LOAD_BALANCE = ON)
      (FAILOVER = ON)
      (ADDRESS = (PROTOCOL = TCP)(Host =por10srv-a)(Port = 1521))
      )
      (CONNECT_DATA =
      (SERVICE_NAME = por10.gruppo.autostrade.it)
      (FAILOVER_MODE =
      (TYPE = SELECT)
      (METHOD = BASIC)
      (RETRIES = 10)
      (DELAY = 3)
      )
      )
      );User ID=npa_collaudo;Password=npa_collaudo;
于 2012-05-16T12:33:05.763 に答える
2

ローカルで配布可能なインライン Oracle クライアントに必要な DLL があるように見えるため、ODP.NET (またはさらに言えば Oracle クライアント) をインストールする必要はありません。あなたの場合、TNSNAMES.ORAファイルを実行可能ファイルと同じフォルダーに配置することができ、専用の「インラインOracleクライアント」がそこからそれを取得します。そうしないと、アプリケーションのローカルな Oracle クライアントが、マシンにインストールされている任意のクライアントから取得しようとします。

于 2015-03-05T13:31:06.613 に答える