.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
参照バージョン:4.122.1.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で動かしている。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です