.net 4フレームワークをターゲットにしたC#Windowsフォームアプリケーションを開発しようとしています。プログラムがOracleデータベースに対してストアドプロシージャを実行し、データベースへの接続を開こうとすると、次のエラーが発生します。
ORA-12557 TNS:プロトコルアダプタをロードできません
私はこれをVisual Studio 2012で開発しており、サーバーエクスプローラーをデータベースに正常に接続させることができましたが、アプリケーションでこのエラーが発生し続けます。
私のマシンには2つのOracle 11gクライアントがあります。 1つは32ビットで、もう1つは64ビットです。異なるアプリケーションには両方が必要なので、一方を削除することはできません。また、PATH変数のOracleホームディレクトリの順序を変更してみました。現在私が接続したいのは、最初に64ビットのものです。
ODP.NETを使用してアプリケーションをデータベースに接続しており、64ビットアプリケーションからdllを参照しています。
私の知る限りでは、提案されていることを実行し、それを機能させることができませんでした。誰かがそれを助けることができればそれはいただければ幸いです。
Oracle_HOME\bin内でsqlplusコマンドを実行するとスムーズに機能するため、ORA-12577エラーはWindows環境またはOracleホームPATHに関連しています。そのマシンの別々のOracle_HOMEに2つ以上のOracleインストール(データベースとコンパニオンなど)がインストールされているため、ウィンドウでOracle_HOME値を設定解除します。詳細については、次の手順に従ってください。 http://www.dba-Oracle.com/t_ora_12577.htm
基本的な問題は、アプリケーションが必要とするRDBMSサーバーのインストールに存在するDLLがOracleインスタントクライアントのインストールに欠落していることです。これが、純粋にPATHの問題ではなく、Oracleホームをclient_1からdb_1に切り替えることができる理由です。
sqlplusは、両方のOracleインストールに存在する最小限のDLLセットを使用するため、どちらの状況でも機能します。
確認することがいくつかあります。必要に応じて#3を試すことを忘れないでください。問題が解決します!
フィッシュ
私はIIS .netプロバイダーを使用しています。パスにOracle32の前にOracle64を置くことでsqlplusの問題を修正できました。これは.netの問題を修正しませんでした。この問題を解決するには、レジストリキーHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracleが\ Oracle32ホームを指し、HKEY_LOCAL_MACHINE\SOFTWARE\Oracleが\ Oracle(64)ホームを指している必要があります。