ODP.NET を使ったデータベースアクセスがうまくいかなくてハマっている。
.NET Framework 2.0 の汎用データベースアクセスクラスを使って、DBMS に依存しないツールにしたいのに、マイクロソフト製の System.Data.OracleClient はバグがあってダメ。
SQL のバインド変数を 10 コ以上使うと
ORA-01008: バインドされていない変数があります。
というエラーになるのだ。
そこでオラクル製の ODP.NET を使っているんだけど、どうもエラーになってしまうことがある。
環境がおかしいのかと思って、もう一度 Oracle を削除して入れ直すことにした。
気をつけなきゃいけないのが、データベースや ODP.NET などのミドルウェアは、ヴァージョンが古いものからインストールしなければいけない、ということ。
ボクのほうはうまく動作するようになったんだけど、同じようにチェンクンの PC でもエラーでツールが動作しない。
ログを出力するようにしてみると、こんなエラーメッセージが。
要求された .Net Framework データ プロバイダが見つかりません。これは、インストールされていない可能性があります。
Oracle や ODP.NET を消したり入れたりしてもダメ。
レジストリをきれいにしても、どうもうまくいかないようだ。
ググってもそれらしいものは見あたらなくて、ODP.NET については情報が少ないね。
でばっぐ日記も結果に出てくるけど、意味なし。
ハマり残業。
ふと思いついた。
もしかしたら、ODP.NET の DLL が GAC (グローバル・アセンブリ・キャッシュ) に登録されていないんじゃないかな?
チェンクンのマシンの C:\WINDOWS\assembly フォルダを確認してみると、たしかに Oracle.DataAccess.dll が見あたらない。
ODP.NET をインストールしたフォルダから、この DLL を探し出して assembly フォルダにドラッグ & ドロップしてみた。
おおっ、ツールが動いた!
これでやっとテストができる…もう 20 時過ぎてるけど。
けっきょくテストは明日からだね。
やれやれ、オラクルとマイクロソフトにはやられたよ。