🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

11568閲覧

ODP.NETを用いてOracleへ接続したい(C#)

.tack

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/11/25 02:33

編集2019/11/25 05:09

前提・実現したいこと

C#でODP.NETを用いてoracleDBと接続するプログラムを作っています。
new OracleConnection()実行時に下記エラーが発生しました。

発生している問題・エラーメッセージ

FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. 指定されたファイルが見つかりません。

該当のソースコード

C#

1using System.Collections.Generic; 2using System.Data; 3using Oracle.ManagedDataAccess.Client; 4 5 6namespace ORACLE_TEST 7{ 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 OracleConnection con = new OracleConnection(); 13 14 con.Close(); 15 } 16 } 17} 18

試したこと

-ODP.NETのインストール
64-bit Oracle Data Access Components (ODAC) ダウンロード
からODAC121024Xcopy_x64.zip をダウンロードし、C:\に解凍。
managed\x32\configure.batを管理者として実行。
(こちらは前任者の引き継ぎ資料に基づく作業です)

-VSで参照の追加
"C:\odp.net\managed\common\Oracle.ManagedDataAccess.dll"
をプロジェクトの参照に追加。

補足情報(FW/ツールのバージョンなど)

-開発環境
OS:Windows10 pro for Workstations(1903)
IDE:Visual Studio Community 2019
-Oracleのバージョン
oracle 11g

C:\Windows\assembly
を見てみると、確かにエラーメッセージで言われている
PublicKeyToken=cc7b13ffcd2ddd51
のファイルは見当たりませんでした。

.net standardがインストールされていない可能性がある。
という記事を見つけ、
nugetから[NETStandard.Library]をインストールしましたが、それでもダメでした。

ODP.NETのインストールが上手くいっていないのか、参照するファイルが間違っているのか、そもそも手順が違うのか。
当方C#もoracleも初心者のため、
何かご存じの方がいらっしゃれば、教えて頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

.tack

2019/11/25 03:04

Orlofsky様 ご指摘ありがとうございます。 URLの書き方を修正致しました。
Orlofsky

2019/11/25 03:19

>.net standardがインストールされていない可能性がある。 >という記事を見つけ、 質問にそのURLも追記しては?
.tack

2019/11/25 05:10

Orlofsky様 ダウンロードしたファイル名を追記致しました。 .net standardの記事に関してですが、今すぐに出てこないので、分かり次第本文に追記致します。
guest

回答2

0

ベストアンサー

configure.bat とあるので、おそらく xcopy 版をダウンロードしたのだと思いますので、それを前提に回答します。

(1) ビット数を確認してください。

作成する .NET のプログラムに合わせたものをダウンロードしてください。
もっとも 32bit/64bit は共存できますので両方インストールしてもOKです。

(2) configure.bat の前に install.bat を実行する必要があります。

install.bat all (インストール先) (ORACLE HOME名)

例)
install.bat all c:\oracle oracle_home11

詳細は readme.htm を確認してください。

(3) configure.bat は解凍先ではなく、インストール先のものを実行する必要があります。

投稿2019/11/25 03:08

KOZ6.0

総合スコア2707

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

.tack

2019/11/25 04:42

KOZ6.0様 ご回答ありがとうございます。 ダウンロードしたものはXcopy版で相違ありません。 (1)ビット数を確認してください。 OSは64bit、VSの設定(プロパティ→ビルド→対象プラットフォーム)はanyCPUでした。 本文URLからダウンロードしたものも、64bitのODACです。 (2) configure.bat の前に install.bat を実行する必要があります。 例を参考に、管理者権限のcmdにて、configure.batを実行したところ、 bat自体はエラーなく完了できました。 (3) configure.bat は解凍先ではなく、インストール先のものを実行する必要があります。 (インストール先)フォルダ直下にあるconfigure.batを管理者権限で実行しました。 この後、VSの「参照の追加」で(インストール先)\odp.net\bin\4\にある Oracle.DataAccess.dllを追加しデバッグしたところ、 ``` System.BadImageFormatException: 'Could not load file or assembly 'Oracle.DataAccess, Version=2.112.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342'. 間違ったフォーマットのプログラムを読み込もうとしました。' ``` というエラーが発生しました。 VSの設定を32bitにすると、こちらのエラーは消えましたが、最初のエラーが発生します。 これはどこかでbit数が食い違っているということでしょうか...
KOZ6.0

2019/11/25 05:34

\odp.net\bin\4\ を参照したなら Version=2.112.4.0 のエラーが出るのはおかしいです。 exe のあるフォルダに dll が残ったりしていないですか? configure.bat が成功しているならば、GAC に登録されるので、参照設定は「アセンブリ」→「拡張」のところからできるはずです。
KOZ6.0

2019/11/25 06:14 編集

しまった 64bit でしたね。参照設定は直接行うで正解です。 AnyCPU でも 「32ビットを選ぶ」というのにチェックが入っていると 32ビットで動作しますのでチェックを外してください。
.tack

2019/11/25 06:54

KOZ6.0様 度々ご確認頂きありがとうございます。 \source\repos\Oracle_test\Oracle_test\bin\Debug\netcoreapp3.0 のフォルダにDLLが残っていましたので、これを削除ののちVS上でも参照を削除→再追加し、 対象プラットフォームはx64を選択(32ビットを選ぶはグレーアウト)しました。 しかし FileNotFoundException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. 指定されたファイルが見つかりません。 のエラーが発生しました。 sn.exe -T "C:\oracle\odp.net\bin\4\Oracle.DataAccess.dll" で、読み込んだdllのキーを調べてみると 公開キー トークン 89b483f429c47342 であり、C:\Windows\assemblyにも Oracle.DataAccess 2.112.4.0 89b483f429c47342 x86 Oracle.DataAccess 2.121.42.0 89b483f429c47342 AMD64 という登録がありました。 VSがなぜPublicKeyToken=cc7b13ffcd2ddd51を参照しにいくのか分かりません...
KOZ6.0

2019/11/25 07:02 編集

.NET Core なら Oracle.ManagedDataAccess.Core を nuget で取得して下さい。 Oracle.DataAccess/Oracle.ManagedDataAccess は .NET Framework 用です。
.tack

2019/11/25 07:14

KOZ6.0様 >Oracle.DataAccess は .NET Framework 用です。 こちら完全に見落としておりました。 .NET Frameworkのプロジェクトを新規作成し、NugetからOracle.ManagedDataAccess.Clientをインストールすることで、DBへ接続することができました。 色々とご教授頂きありがとうございました。 まだまだ勉強が足りないようなので、精進致します。
guest

0

NuGetを使ってライブラリを導入すると依存性などの問題をある程度解決してくれます。
手動でインストールしたものはアンインストールするか、やり直した方が手っ取り早いと思います。

ソリューションエクスプローラからプロジェクトを右クリックし[NuGetパッケージの管理]を選択。

参照を選択する。

検索欄に"Oracle"と入力する。

左のペインでOracle.ManagedDataAccessを選択する。

右のペインでインストールを押す。

投稿2019/11/25 03:23

hihijiji

総合スコア4152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

.tack

2019/11/25 04:53

hihijiji様 ご回答ありがとうございます。 VSのソリューションエクスプローラーで、読み込んだ依存関係を全て削除し、 NugetからOracle.ManagedDataAccess(最新の安定版 19.5.0)をインストールし、 プログラムのusing句を Oracle.DataAccess.Client → Oracle.ManagedDataAccess.client に変更して実行しました。 しかし、最初と同様のエラーが発生しました。 こちらの場合、VSの設定を32bit,64bit,いずれに設定しても同様のエラーでした。
hihijiji

2019/11/25 05:52

ひょっとしたら、.NET Framework 4.6.1未満か .NET Core 2.0未満を使ってたりしませんか?
.tack

2019/11/25 06:12

hihijiji様 VSのソリューションエクスプローラ上で確認しましたところ、 依存関係→フレームワークには microsoft.NetCore.App バージョン 3.0.0 との記載がありました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問