- PR -

ODP.NETについて

1
投稿者投稿内容
ジルカ
会議室デビュー日: 2006/06/02
投稿数: 9
投稿日時: 2007-02-23 15:54
OPD.NETについて質問させてください。
1.VS2005+Oracle10g環境に、ODP.NET(最新バージョン10.2.0.2.20)をインストール。
2.VS2005を起動し、サーバーエクスプローラにてOracle10gにデータ接続。
3.データセットデザイナにテーブルを追加
3の時に、System.Data.OracleClientクラスをベースとした、Adapterが生成される。
(AdapterのConnectionをプロパティを見ると、System.Data.OracleClient.OracleConnectionとなっている)

なぜ、OPD.NETをインストールしたのに、Oracle.DataAccess.ClientをベースとしたAdapterが生成されないのでしょうか。


まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-02-23 17:31
TableAdapter自動生成はADO.NETの機能であり、
ODP.NETの機能を使うわけではありません。

OTNの掲示板にも同じような質問がありました。
http://otn.oracle.co.jp/forum/message.jspa?messageID=28018561

[ メッセージ編集済み 編集者: まさる 編集日時 2007-02-23 17:34 ]
ジルカ
会議室デビュー日: 2006/06/02
投稿数: 9
投稿日時: 2007-02-26 11:09
まさるさん、ご回答有難う御座います。

ODP.NETは利用することはできないのですね。残念です。
この質問の背景には、ODP.NETの変更通知機能を使いたかったからです。
変更通知機能は、Oracle.DataAccess.Client.OracleDependencyを使用すると思うの
ですが、ADO.NETで自動生成されたTableAdapterとは連携できないのでしょうか。。。

以下のコードを試しましたが、だめでした。
○自動生成されたTableAdapterのPartial Classにて
----------------------------------------------------------------------
Dim orcleDep As New Oracle.DataAccess.Client.OracleDependency
orcleDep .AddCommandDependency(CType(Me.Adapter.SelectCommand , _
Oracle.DataAccess.Client.OracleCommand))

----------------------------------------------------------------------
System.Data.OracleClient.OracleCommandとOracle.DataAccess.Client.OracleCommandは別物クラスらしく、コンパイルエラー。当然ですが・・・

SQL Serverの場合、自動生成したTableAdapteとSql.SqlNotificationRequestが連携
できたので、Oracleでもできるのかと思いましたが・・残念です。

自動生成されたTableAdapterとODP.NETと連携方法がご存知でしたら、教えて頂けます
でしょうか。

以上です。




 

[ メッセージ編集済み 編集者: ジルカ 編集日時 2007-02-26 11:10 ]
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2007-02-26 14:08
引用:

自動生成されたTableAdapterとODP.NETと連携方法がご存知でしたら、教えて頂けますでしょうか。



おそらく一筋縄ではいかないでしょう。

自動生成されたTableAdapterのコードのSystem.Data.OracleClient名前空間のクラスをOracle.DataAccess.Client名前空間のものに置き換えればもしかしたら動くかもしれませんが、イレギュラーな手法を用いるため動作の保障はできません。第一手間が掛かりすぎるので、自動生成されたTableAdapterの意味がないですし。

もしくは、

引用:

Dim orcleDep As New Oracle.DataAccess.Client.OracleDependency
orcleDep.AddCommandDependency(CType(Me.Adapter.SelectCommand , _
Oracle.DataAccess.Client.OracleCommand))


のようにキャストするのではなく、SelectCommandを元にODP.NETのOracleCommandインスタンスを生成してやれば動くかもしれません。ただ、System.Data.OracleClient名前空間とOracle.DataAccess.Client名前空間が同居するのはあまりお勧めできません。
ジルカ
会議室デビュー日: 2006/06/02
投稿数: 9
投稿日時: 2007-02-26 14:21
やはり難しそうですね。。。
最初は、System.Data.OracleClientで作成されたコードを、Oracle.DataAccess.Clientに一括変換!とも考えましたが、自動生成の意味もなくなりメンテナンスも大変そうなので辞めました。
また、ODP.NETのOracleCommandを生成するにもOracleConnectionもODP.NETのものを使わないと駄目そうです。
一筋縄ではいかなそうなので、諦めます。
OracleよりもSQL Serverの方がいいかなって思い始めました。

まさるさん、有難う御座いました。

以上。
1

スキルアップ/キャリアアップ(JOB@IT)