1

Oracle dbへの接続に使用する.NET winformsアプリケーションがあります。ODPODP のインストールは 32 ビットですWin 7 64 bit machine。開発マシンでプラットフォーム ターゲットを x86 に設定していますが、問題なく動作します。しかし、アプリケーションをテストするWin Server 2003 64 bit machineと、例外が発生しました

The type initializer for 'Oracle.DataAccess.Client.OracleCommand' threw an exception.                                            

UNHANDLED EXCEPTION STACK TRACE:at Oracle.DataAccess.Client.OracleCommand.Dispose(Boolean disposing) 
at System.ComponentModel.Component.Finalize()

UNHANDLED EXCEPTION SOURCE: Oracle.DataAccess

UNHANDLED EXCEPTION INNER EXCEPTION: Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client    at Oracle.DataAccess.Client.OracleInit.Initialize()
at Oracle.DataAccess.Client.OracleCommand..cctor()

UNHANDLED EXCEPTION DATA: System.Collections.ListDictionaryInternal

UNHANDLED EXCEPTION MESSAGE: The type initializer for 'Oracle.DataAccess.Client.OracleCommand' threw an exception.

そして、プラットフォーム ターゲットをAny CPUWindows 7 64 ビットに設定すると、例外が発生します。

Could not load file or assembly 'Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.

開発マシン (Win 7 64 ビット) の ODP バージョンは11.2.0、テスト マシン (Win Server 2003 64 ビット) も 11.2.0 です。

両方のマシンでアプリケーションを実行するにはどうすればよいですか? 何か案が?

4

1 に答える 1

0

IMO いくつかのオプションがあります。

  1. x86 用にコンパイルし、32 ビット Oracle クライアントを 64 ビット サーバーにインストールします (ORACLE_HOME、TNS_ADMIN などのシステム変数を変更すると、並行して実行できます)。
  2. x86 用にコンパイルし、32 ビットOracle Instant Client用のすべての DLLをバイナリと共にパックします (TNS_ADMIN システム変数が設定されていることを確認してください。そうしないと、LDAP または tnsnames を使用できなくなります)。
  3. 任意の CPU 用にアプリケーションをコンパイルしますが、x64 および x86 ビット用に異なる dll のセットを作成します (Oracle.DataAcess.dll は特定のアーキテクチャ用にコンパイルされ、x64 用と x86 用のバージョンがあります)。
  4. Oracle は管理された Oracle ドライバーに取り組んでおり、 Oracle クライアントはもう必要ありません。ほとんどのコードベースは簡単に変換できますが、まだ機能が完全ではなく、Oracle 11+ データベースのみをサポートしていることに注意してください。
于 2013-06-25T12:28:50.487 に答える