none
System.Data.Common.DbProviderFactories.GetFactoryメソッドでオラクルに接続する際 RRS feed

  • 質問

  • System.Data.Common.DbProviderFactories.GetFactoryメソッドでオラクルに接続する際に

    要求された.Net Framework データ プロバイダーが見つかりません。これは、インストールされていない可能性があります。

    と言われてしまいました。

    GetFactoryじゃなく、普通にOracle.DataAccess.dllを参照しての接続はできます

    machine.configファイルについて,system.dataセクションのDbProviderFactories要素にプロバイダ情報が登録されていないのが原因のようですが

    ①何が原因で登録されなかったのか、

    ②このような端末が存在してしまう可能性があるので、GetFactoryは危険なものなのか

    ③これを修正するには手で修正するしかないのか

    ④プログラム内でなんとか回避できるのか

    が疑問となっております。


    2018年12月17日 5:59

回答

  • ①何が原因で登録されなかったのか、

    12.1 以前の場合、ORACLE クライアントをインストールする際、対象の .NET Framework がインストールされている必要があります。
    たとえば .NET Framework 3.5 を有効化していない Windows 10 に Oracle Client をインストールすると ODP.NET 2.0 が登録されません。(ファイルは配置される)

    あと、ソースが未確認で申し訳ないのですが 12.2 よりインストーラが GAC に登録してくれなくなったという話を聞きました。
    むっくんさんのインストールした ORACLE Client が 12.2 ならそういうことなのかもしれません。

    ②このような端末が存在してしまう可能性があるので、GetFactoryは危険なものなのか

    これは使い方次第かと。
    ODP.NET 固有のおいしい機能が使えなくなるので、個人的には好きではなかったりします。

    ③これを修正するには手で修正するしかないのか

    手動で OraProvCfg.exe をパラメタ付きで起動してあげる必要があります。

    ④プログラム内でなんとか回避できるのか

    プログラム内から管理者権限で OraProvCfg.exe を起動すればなんとかなるのでしょうけど、そこまでする必要を感じません。
    インストール時に気をつければいい話なので。



    • 編集済み KOZ6.0 2018年12月17日 11:11
    • 回答としてマーク むっくん 2018年12月18日 7:03
    2018年12月17日 11:00

すべての返信

  • ちなみにプロバイダーとして、ODP.NETはインストールされているのでしょうか?

    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年12月17日 6:04
    モデレータ
  • インストールできていているといっていいのでしょうか、GetFactoryじゃなく、普通にOracle.DataAccess.dllを参照しての接続はできます!

    2018年12月17日 6:19
  • 質問文に明記されないと第三者にはわかりません。その上で、

    ODP.NETのインストールが成功していて、利用できないのであれば、ODP.NETインストーラーの問題でしょうからOracle社に問い合わせてはどうでしょう?

    2018年12月17日 6:22
  • ターゲットフレームワーク、ターゲットプラットフォームは知りませんが、下記GACにOracle.DataAccessがちゃんと登録されているんですかね。
    求めているターゲットフレームワーク、ターゲットプラットフォームに対するODP.NETが正しくインストールされていないようにしか思えないんですが。

    C:\Windows\assembly
    C:\Windows\Microsoft.NET\assembly\GAC_32
    C:\Windows\Microsoft.NET\assembly\GAC_64

    まっさらな端末にOracle.DataAccess.dllだけ配置しても動作しませんし、Oracle.DataAcess.dllは配布する対象ではありませんから、
    プログラムでなんとかするのではなく、正しい環境構築方法をしっかり確立させる事案かと思います。

    色んなOracleクライアントの環境が混ざって、たまたま動く状況になっている端末と、そうでない端末が出来上がってしまっているだけでは。

    2018年12月17日 7:34
  • ①何が原因で登録されなかったのか、

    12.1 以前の場合、ORACLE クライアントをインストールする際、対象の .NET Framework がインストールされている必要があります。
    たとえば .NET Framework 3.5 を有効化していない Windows 10 に Oracle Client をインストールすると ODP.NET 2.0 が登録されません。(ファイルは配置される)

    あと、ソースが未確認で申し訳ないのですが 12.2 よりインストーラが GAC に登録してくれなくなったという話を聞きました。
    むっくんさんのインストールした ORACLE Client が 12.2 ならそういうことなのかもしれません。

    ②このような端末が存在してしまう可能性があるので、GetFactoryは危険なものなのか

    これは使い方次第かと。
    ODP.NET 固有のおいしい機能が使えなくなるので、個人的には好きではなかったりします。

    ③これを修正するには手で修正するしかないのか

    手動で OraProvCfg.exe をパラメタ付きで起動してあげる必要があります。

    ④プログラム内でなんとか回避できるのか

    プログラム内から管理者権限で OraProvCfg.exe を起動すればなんとかなるのでしょうけど、そこまでする必要を感じません。
    インストール時に気をつければいい話なので。



    • 編集済み KOZ6.0 2018年12月17日 11:11
    • 回答としてマーク むっくん 2018年12月18日 7:03
    2018年12月17日 11:00
  • いつも的確な回答ありがとうございます!
    2018年12月18日 7:05