.net 【.net】Oracle.DataAccessの例外と原因まとめODP.Net経由でOracleに接続する場合のエラー対処法まとめです。 事象①System.TypeInitializationException: 'Oracle.DataAccess.Client.OracleCommand' のタイプ初期化子が例外をスローしました。 ---> Oracle.DataAccess.Client.OracleException: プロバイダは、このバージョンのOracleクライアントと互換性がありません 原因 クライアントにインストールしているOracle.DataAccess.dllと、参照しているOracle.DataAccess.dllのバージョンが異なる。 発生例 インストールバージョン:4.121.2.0 事象②System.IO.FileNotFoundException: ファイルまたはアセンブリ名 'Oracle.DataAccess'、またはその依存関係の1つが読み込めませんでした。指定されたファイルが見つかりません。 (Could not load file or assembly 'Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.) 原因 アプリケーションがOracle.DataAccess.dllを見つけれない状態。気をつけなければならないのが、単純にdll同梱漏れ&未インストールの他に、異なるプラットフォーム(x86, x64)版のODACをインストールした場合も対象となること。 発生例 64bitOSで、32bit版のODACをインストールしており、AnyCPUやx64でビルドされたアプリケーションで実行する。 事象③System.BadImageFormatException: ファイルまたはアセンブリ名 'Oracle.DataAccess'、またはその依存関係の1つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 (Could not load file or assembly 'Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.) File name: 'Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342' 原因 ターゲットCPUと、動作環境のOSビット数と異なる。事象②と違い、アプリケーションはOracle.DataAccess.dllを見つけられている。 発生例 x86でビルドしたが、64ビットOSで動かしている。 事象④System.TypeInitializationException: ‘Oracle.DataAccess.Client.OracleConnection’ のタイプ初期化子が例外をスローしました。 —> System.DllNotFoundException: DLL ‘OraOps12.dll’ を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E) 場所 Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version) 場所 Oracle.DataAccess.Client.OracleInit.Initialize() 場所 Oracle.DataAccess.Client.OracleConnection..cctor() 原因 OracleConnection生成時に上記の例外が発生する。OraOpsXX.dllは、Oracle.DataAccess.dllから内部的に呼ばれるdll。要するにOracle.DataAccess.dllはあるが、OraOpsXX.dllが見つからない状態。 発生例 Oracleクライアントをインストールしていない。 2020/10/8 技術系memo ASP.NET(MVC5)で作成したアプリを変更してデプロイした。デプロイ後、Invoke-WebRequestでアクセスしたところ、アプリケーションエラーが発生した。エラー内容は下記。 Visual Studioで開発してテストしていると何も問題がなかった。原因は、Web.configをデプロイしていなかったこと。Visual Studioの環境や.Net Framework 4.8の環境は、毎月更新されていく。その環境でコンパイルしたときに、もともとのWeb.configに記載された情報と新しくコンパイルされたものの情報が異なった。そのために、実行時にエラーになった。解決策としては、新しくコンパイルした方のWeb.configを使うこと。環境に合わせて変更する必要があれば変更する。 |