Oracle Data Provider for .NETを使用するアプリケーションを開発しました。 OracleクライアントとODP.NETがインストールされていない別のコンピューターにアプリケーションファイル(.exe)とODPライブラリ(Oracle.DataAccess.dll)をコピーします。アプリケーションを実行すると、エラーmsgが発生しました。「Oracle.DataAccess.Client.OracleConnection」の型初期化子が例外をスローしました。
*****************Exception Text***************
System.TypeInitializationException: The type initlializer for 'Oracle.DataAccess.Client.OracleConnection at Oracle.DataAccess.Client.OracleConnection..cctor()
--- End of inner exception stack trace ---
at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
...
アプリケーションを実行するコンピューターにODP.NETとOracleクライアントをインストールする必要がありますか?はいの場合、インストールする必要はないが、アプリケーションを実行できる他の方法はありますか?
ありがとうございました
簡単な方法!!!
Entity Frameworkを使用しており、Visual Studioバージョンが2012以降の場合
完了。 Visual Studioを再起動して、コードをビルドします。
これらのパッケージは何をしますか?
これらのパッケージをインストールした後、データベースに接続するために追加のOracleクライアントソフトウェアをインストールする必要はありません。
Oracle Data Provider for .NET (Oracleから)と 。NET Framework Data Provider for Oracle (Microsoftから)の両方で、マシンにOracleクライアントをインストールする必要があります。
OK、同じプロセスを使用した他のアプリケーションが確実に機能したことがわかっている場合。新しいアプリケーションで、データアクセスリファレンスと3つのdllファイルがあることを確認してください...
OracleサイトからこれをダウンロードしましたODAC1120320Xcopy_32bit:
http://www.Oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html
参照:Oracle.DataAccess.dll(ODAC1120320Xcopy_32bit\odp.net4\odp.net\bin\4\Oracle.DataAccess.dll)
プロジェクトに次の3つのファイルを含めます。
正しい参照とファイルを使用して別のアプリケーションを作成しようとすると、そのエラーメッセージが表示されます。
修正:3つのファイルすべてを強調表示し、[出力にコピー] = [新しい場合はコピー]を選択しました。 dllの1つが100MBを超えているため、新しい場合はコピーしましたが、更新してもこれらのファイルは再度コピーされません。
また、レジストリエラーが発生したため、修正しました。
public void updateRegistryForOracleNLS()
{
RegistryKey Oracle = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Oracle");
Oracle.SetValue("NLS_LANG", "AMERICAN_AMERICA.WE8MSWIN1252");
}
Oracle nls_langリストについては、次のサイトを参照してください。 https://docs.Oracle.com/html/B13804_02/gblsupp.htm
その後、すべてがスムーズに機能しました。
役に立てば幸いです。
Oracle.ManagedDataAccess.dllを使用してみてください
NuGet(「Oracle管理」を検索)またはダウンロード ODP.NET_Managed.Zip で入手できます(リンクはベータ版ですが、正しい方向を示しています)
これを使用して、デプロイするコンピューターにOracleクライアントをインストールする必要がないようにします。 N.B.私の意見では、これはコンソールアプリには適していますが、アプリケーションをインストールする場合は迷惑です。
これは古くても関連する質問であり、ここでの回答は役に立ちますが、OPの質問の両方に完全に答えた回答はありません。
1。アプリケーションを実行するコンピューターにODP.NETとOracleクライアントをインストールする必要がありますか?
[〜#〜] yes [〜#〜]-ODP.NETを使用している場合、Unmanaged。これは、通常、Oracle Clientインストーラで「Oracle Data Provider for .NET」を選択したときにインストールするバージョンです(たとえば)。これをOracleからダウンロードします(グーグルit:OracleのURLは頻繁に変更されます)。
ただし、ODP.NET、Managedを使用している場合(おそらくこれを代わりにこれを使用したい場合)、いいえ、完全なOracle Clientではなく、アプリでODP.NET、Managedのみをインストール(またはデプロイ)する必要があります。詳細は以下をご覧ください。
2。はいの場合、インストールする必要はないが、アプリケーションを実行できる他の方法はありますか?
はい、少なくとも1つの方法があります。そして、ODP.NETの管理ポートです。
残念ながら、ODBC、MicrosoftのOracle Provider for .NET(はい、古い、非推奨のもの)、ODP.NET Unmanaged DLL)を含む通常の回避策では、すべてOracleクライアントをインストールする必要があります。 Oracleの友人が私たちに素敵な小さな(〜5MB)DLLを提供します。これも管理されます。これは、32ビットおよび64ビットバージョンをデポする必要がなくなりました。 32ビットおよび64ビットのOracleクライアント!10.0.2.1(または何でも)に対してビルドするアセンブリバインディングでこれ以上の問題はありませんが、顧客は9iから12cまでのさまざまなクライアント(「g」を含む)をインストールしますアプリと一緒に出荷し、nugetで管理できるためです。
ただし、nugetパッケージとして利用可能なODP.NET Managedを使用する場合、Oracle Clientをインストールする必要はありません。 ODP.NET、マネージDLL。以前にODP.NET、アンマネージDLLを使用していた場合、切り替えるのは非常に簡単です。マネージODP.NETへのすべての参照(csharpの.csprojファイルなど)を変更してから、using
ステートメント、たとえば:using Oracle.DataAccess.Client
はusing Oracle.ManagedDataAccess.Client
になります。 (ODP.NET Unmanagedで公開されているフルクライアントで、高度なDB管理機能の一部を使用していると思われる場合を除き、私は自分でやったことはありません。幸運を祈ります。)また、あなたのapp.config
/web.config
ファイルからこれらの迷惑なassemblyBindingRedirect
ノードをすべて破棄し、そのジャンクを二度と発汗させないでください!
参照:
トラブルシューティング:
通常、このエラーは、ODP.NETは正常に検出されたが、Oracleクライアントが見つからなかったか、インストールされていないことを意味します。これは、アーキテクチャが一致しない場合にも発生する可能性があります(32ビットのOracleクライアントがインストールされているが、64ビットのアンマネージODP.NETを使用しようとしている、またはその逆)。これは、アクセス許可の問題、パスの問題、およびアプリドメイン(WebアプリやEXEなど)に関するその他の問題が、ネットワーク経由でOracleと実際に通信するOracle DLLを見つけることができないために発生する可能性があります(ODP.NET Unmanaged DLLは基本的に、ADO and stuff)にフックする単なるラッパーです。
この問題に対して私が見つけた一般的な解決策:
アプリは64ビットですか?
アプリは32ビットですか?
Oracle Clientは正しいアーキテクチャ用にすでにインストールされていますか?
Oracle_HOME
変数を確認し、Oracleが見つかることを確認します(新しいバージョンでは代わりにレジストリを使用できます)Oracle_HOME
フォルダーのアクセス許可を確認します。これがどこにあるかわからない場合は、レジストリを確認してください。 ASP.NETアプリワーカープロセスがNetwork Serviceユーザーを使用しており、何らかの理由で32ビットクライアントと64ビットクライアントを並べてインストールすると、Authorized Users
グループの最初のクライアントから権限が削除される場合があります。 ..ホームフォルダーのパーマを修正すると、これが修正されました。これらのクラスを機能させるには、Oracleクライアントドライバーをインストールする必要があります。
Oracleを処理できるサードパーティの接続フレームワークが存在する場合がありますが、特定のフレームワークを知っている人がいるかもしれません。
Oracleクライアントが必要です: http://www.Oracle.com/technology/oramag/Oracle/08-nov/o68odpnet.html