ODP.netとは
ODP.net(Oracle Data Provider for .net)はMicrosoftの.netFramework上で動作するアプリケーション用のミドルウエアです。odp.net自体も.netFrameworkを使用して実装されているためそのほかのミドルウエアよりも.netFrameworkとの親和性が高くなっています。
プログラムが利用する.netFrameworkのバージョンが1.Xであるか、2.X以降であるかによって利用するライブラリが異なっており、 2.x以降のライブラリが通常のインストールメディアに含まれているのは11g以降で10.2の2.x用ライブラリはODAC10.2.0.2.21以降にしか含まれないので注意が必要です。 2.x用のライブラリがインストールされているかどうかは「%ORACLE_HOME%\odp.net\bin\2.x\Oracle.DataAccess.dll」が存在しているかどうかで判断できます。
ODP.netのライブラリ(アセンブリ)管理
ODP.netをインストールするとC:\Windows\assemblyで表示されるグローバル・アセンブリ・キャッシュ(GAC)情報に以下のような情報が追加されます。- Oracle.DataAccess(ODP.netの本体であるOracle.DataAccess.dllの登録情報)
- Oracle.DataAccess.resource(ODP.netのサテライトアセンブリ(日本語環境用のデータ等を格納))
- Policy.<※>.<ポリシー対象バージョン>.Oracle.DataAccess(ODP.netのポリシーファイルの設定)
※.netFrameWork 1しかなかった時代のライブラリにはORACLEのメジャーバージョン番号、.netFrameWork 1用と2用でライブラリが分かれた後は.netFrameWorkのメジャーバージョン番号が入ります。
COMコンポーネントであるOO4Oはレジストリ上でライブラリが管理されていましたが、.netFrameWork環境のライブラリであるODP.netはアセンブリ情報によりライブラリが管理されます。 アセンブリ情報にはバージョンやプロセッサのアーキテクチャ等が表示されるためこの情報からインストールされているODP.netのバージョン等が確認できます。 ODP.netの公開キートークンの値は「89b483f429c47342」になっています。
ODP.netの使用設定
.netFrameworkアプリケーションを作成する場合はVisual Studioを開発環境として使用している場合がほとんどだと思います。 本ページでは開発環境:VisualStrudio2008、言語:VB.netの場合の設定方法を記載します。 odp.netを使うための設定はツールバーのプロジェクト→参照の追加よりodp.netのライブラリ(oracle.DataAccess.dll)を追加すれば利用できるようになります。1 ツールバーのファイル→新しいプロジェクトよりサンプルプロジェクトをコンソールアプリケーションとして作成
2 ツールバーのプロジェクト→参照の追加よりoracleDataAccess.dllを追加
3 以下のソースを貼り付け
4 ツールバーのデバッグ→デバッグ開始より実行
ODP.netのサンプルプログラム
scottユーザのemp表のEMPNO、ENAME列を表示するプログラムです。Imports Oracle.DataAccess.Client Module Module1 Sub Main() Dim conn As OracleConnection Dim cmd As OracleCommand Dim reader As OracleDataReader Dim endFlg As Boolean Try '接続 conn = New OracleConnection conn.ConnectionString = "User Id=scott;Password=tiger;Data Source=ORCL102;Pooling=false;" conn.Open() 'select文実行(接続型) cmd = New OracleCommand("SELECT EMPNO,ENAME FROM SCOTT.EMP", conn) reader = cmd.ExecuteReader() 'フェッチ及び出力 Console.WriteLine("EMPNO ENAME") endFlg = reader.Read() While endFlg Console.WriteLine(reader.GetOracleDecimal(0).ToString & " " _ & reader.GetOracleString(1).ToString) endFlg = reader.Read() End While Console.Write("press enter...") Console.Read() '切断 conn.Close() Catch ex As Exception MsgBox(ex.Message) End Try End Sub
ODP.netの初期化時、接続時のエラー
①ファイルまたはアセンブリ 'Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。参照に追加したODP.netのワードサイズとアプリケーションのワードサイズが異なる可能性があります。 ODP.netは64bitのものと32bitのアセンブリがそれぞれ存在しており、アプリケーションが32bitであれば32bit、64bitであれば64bitのODP.netを使用する必要があります。 インストールされるODP.netはC:\Windows\Assembly配下のOracle.DataAccessのプロセッサアーキテクチャから確認できます(AMD64であれば64bit用のODP.netがインストールされています)。
また、アプリケーションのワードサイズはvisual Studio 2010ではvbの場合プロジェクトのプロパティ→コンパイル→詳細コンパイルオプション→ターゲットCPU、 C#では構成マネージャ→アクティブソリューションプラットフォームより変更することができます。
②Oracle.DataAccess.Client.OracleConnection' のタイプ初期化子が例外をスローしました。
上記のワードサイズ不一致のほか、ORACLEクライアントのバージョンとODP.netのバージョンが一致していない可能性があります。 ロードされるORACLEクライアントは環境変数PATHの値等で変化します。本サイトで無償提供しているO-Analyzerを使うと接続失敗時にロードされたライブラリ情報がログとして出力されますので確認してみてください。