データベースプロバイダの差異
ADO.NETを使ってインタフェースベースで汎用的なコードを書いてもデータベース(プロバイダ)の違いにより動作しない(SQLのパラメータとか)ことがありますが、同一DB(例えばOracle)に対するOracleClientとODP.NETの違いってどの程度あるもの何でしょうか?
インタフェースベースでDB処理を書いていたので、試しにOracleClientからODP.NETに切り替えてみたら、例外が飛びまくりでした。例えば、number型のフィールドにアクセスするのに、
decimal no = (decimal) row["XXX"];
とか書いているとアウト。ODP.NETではdecimalではなくlongになっていたりと、何故、統一されていないか問い詰めたくなりました。(^^;
回避しようとするとキャストではなく、Convert.ToDecimalとかを使うことになりますが、VS上で生成された型付きデータセットとかは、思いっきりキャストしてくれているんですよね。この問題で今回はODP.NETに乗り換えるのは諦めたのでこれ以上調査していませんが、おそらく他にも色々あるでしょう。
相手が同じオラクルでもこんな状況なので、DB非依存なコードに憧れますが現実的には厳しいですね。