残念ながら、私は .NET から Oracle を使用しようとしていますが、それは 1997 年に戻ったようなものです。物事を適切に説明することは弱点の兆候であり、レジストリと環境変数が機能しているようです。
これが私が持っている距離です。
私は Oracle.com での生活についての巨大なフォームに記入し、
ODBC Windows 64 ビット インスタンス クライアント、11.2.0.3.0をフォルダーに解凍します。 Basic Windows 64-bit Instant Client、11.2.0.3.0を上記と同じフォルダーに解凍します。
install .exe を実行しました (MSI はありません。これが 1997 年であることを思い出してください)。
ネットワーク共有上の企業の TNSNames.ora ファイルを指す TNS_NAMES 環境変数を追加し、コントロール パネルでクイック DSN をセットアップしてテストを実行しました。
次に、最新の ODP.NET for .NET 4.0 の XCOPY バージョンをダウンロードし、ソース管理ワークスペースの下の Dependencies フォルダーにコピーしました。
プロジェクトからDependencies\odp.net4\odp.net\bin\4\Oracle.DataAccess.dllへの参照を追加しました
管理された ODP.NET のものに、管理されていない Oracle ライブラリを見つけることができる場所を知らせる必要があることを読みました。どこか?
ここで、DllPath という構成ファイル パラメーターを設定しています。悲しいことに、Oracle のドキュメントは、.NET 構成ファイルのセクションを configSections セクションに接続する必要があることを認識していないようです。
これが設定ファイルのセクションです。
<oracle.dataaccess.client>
<add key="DllPath" value="D:\Trunk\Dependencies\odp.net4\bin" />
</oracle.dataaccess.client>
configSection には何が入りますか? これで見つけたいくつかのスレッドは例を示し、「type= がどうあるべきかわからない」と言います。これが主なビットです!
誰でも私にアドバイスできますか?.NETからOracleビューをクエリするためのダミーガイドへのリンクを知っている人はいますか?
2012 年に Oracle を使わなくて済むようにするために、1997 年にできることはありますか?
アップデート
ちょっとした更新です。OraOps11w.dll を出力ビン フォルダーにコピーし、以前に追加した web.config ファイルの変更をすべて削除しました。
現在、次のエラーが発生しています。これについては調査中です。
ファイルまたはアセンブリ 'Oracle.DataAccess' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。
他のいくつかのフォーラムでは、Oracle.DataAccess.dll を GAC に登録することについて話し合っていますが、これは避けたいと思っています。とにかく違いがどうなるかわかりませんが、やってみます。
更新 2
Oracle.DataAccess.dll ライブラリを GAC に登録しても違いはなく、登録を解除しました。
今週の仕事が終わり、電車に乗らなければなりませんが、ここで別の開発チームにメールを送り、彼らが以前にこの戦いを戦ったことを願っています (そして、他の人のように毎晩の抽出を使用していないことを願っています)。
更新 3
今朝、64 ビット バージョンの IIS Express 8.0 RC をダウンロードしてセットアップしました。64 ビット バージョンは VS2010 からサポートされていないため、コマンド ラインから実行する必要があります。これは非常に簡単で、タスク マネージャーを見ると、VS が iisexpress.exe *32 に使用するコマンド ラインを確認できました。
残念ながら、64 ビット IIS Express でホストされているサイトを参照すると、このエラーが発生します。
ハンドラ "ExtensionlessUrl-Integrated-4.0" のモジュール リストに不正なモジュール "ManagedPipelineHandler" があります
これは、この調査の範囲を超えた問題であるため、ODP.NET の 32 ビット バージョンを使用してみます。
更新 4
32 ビット バージョンのフル インストールをダウンロードしましたが、Oracle Universal Installer を見て怖くなりました。私の貴重な開発ボックスで信頼するにはあまりにも90年代に見えます. 私は 32 ビットの「XCopy」クライアントを使用しています。これにより、サイトのホームページを表示できるので、参照が機能しています。アーキテクチャの不一致 32/64 問題を示唆してくれた人に感謝します。
現在、新しい OracleConnection をインスタンス化するときにこのエラーを調べています。
プロバイダは、Oracle クライアントのバージョンと互換性がありません
UPDATE 5私はそれをやったと思います。
そこで、32 ビットの最新の 11g "Instant Client" をダウンロードし、ソリューション トランク コードベースの \Dependencies フォルダーに配置しました。このフォルダを %PATH% システム環境変数に追加し、そこに OraOps11w.dll ファイルも入れました。
最後に、 _oracleConnection = new OracleConnection(connectionString) はスローしません! 今、本番環境にデプロイするときは、机の上にラフロイグのボトルがあることを確認する必要があります。
要約すると、Windows 7、64 上の IIS Express 7.5 (32 ビット プロセス) の場合:
32 ビット 11g の「Instant Client」をダウンロードしてフォルダに抽出し、この場所を PATH に追加します。Oci.dll は、メインの Oracle クライアント側アンマネージ ライブラリです。
32 ビット ODP.NET をダウンロードして、いくつかのフォルダーに抽出します。
OraOps11w.dll を、Instant Client が存在するメイン フォルダ (上記) にコピーします。
TNSNames.ora テキスト ファイルが存在するフォルダを指す TNS_ADMIN 環境変数を追加します。これはホスト ファイルに似ており、Oracle サービス名をサーバー ホスト名にマップします。
Visual Studio を閉じてから再度開いて、新しい環境変数を確実に取得し、ODP.NET フォルダーにある Oracle.DataAccess.dll マネージド アセンブリへの参照を追加します。
それだけです。方法を知っていれば、かなり簡単に聞こえます。
アップデート 5.1
以下のエラーを調査しています。これは、ファイアウォールの問題であると確信していたため、最初は報告していませんでした。私が所属している会社では、各ワークステーションに 2 つずつありますが、Oracle サーバーへの raw ソケットを開いただけなので、それはできません。
ORA-12541: TNS: リスナーがありません