- PR -

ADO.NETのリレーションシップの読み取りについて

1
投稿者投稿内容
ちゅり
会議室デビュー日: 2003/09/24
投稿数: 9
投稿日時: 2003-09-24 19:17
現在、VB.netでアクセスファイルを読み込んで、
アクセスのデータ情報を読み出すプログラムを作っています。

その中でテーブル間のリレーションシップの取得をしようと思うのですが、
上手くいきません。
ADO.netの本を読み、調べたのですが、
DataSetにリレーションシップを作成するサンプルは載っていても
データベースからリレーションシップを読み取るサンプルが載っていません。

どうすればリレーションシップを読み出すにはどうすればいいのでしょうか?
ちゅり
会議室デビュー日: 2003/09/24
投稿数: 9
投稿日時: 2003-09-27 18:41
自己レスです。
Accessのシステムオブジェクトに
MSysRelationshipというテーブルがあり、
そのテーブルにリレーションデータが格納されてる事を知りました。
しかしそのテーブルを読み取りに行くと
System.OleDb.OleDbException: 'MSysRelationships' の読み取り権限がないので、
レコードを読み取る事ができません。と言われ
エラーが出て読み取れません。

WindowsXPで管理者権限で繋いでいます。
どんな情報でもいいのでお願いします!!
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 2005-01-21 10:57
質問に便乗させてください。

私も、
SQLServerのデータベースで
テーブル間に設定したリレーションシップを
ADO.NETでDataSetへ読み取ることができるのかどうか知りたいと思っています。

DB上でリレーションシップの設定がされている
二つのテーブルをデザイナへドラッグしてきて
データセットを作成してみたのですが、
リレーションの設定までは読み込まれていないようなので
できなさそうだとは思っているのですが、
確信がもてません。
逆にリレーションシップ以外で
どのような情報なら読み込むことができるのか
まとめておきたいと思います。

知っている方がいらっしゃいましたら
(またはそのような情報載っているページなど)
よろしくお願いします。
とっちん
会議室デビュー日: 2004/11/22
投稿数: 18
投稿日時: 2005-01-21 11:13
こんにちは。

SQL文のJOINを使って取得するのが手っ取り早いような気がしますが...。

DataSetのDataTableに各々のテーブルを読み込んだ後にリレーションを設定する方法であれば
http://www.atmarkit.co.jp/fdotnet/dotnettips/137multisel/multisel.html
Yoko
常連さん
会議室デビュー日: 2004/11/16
投稿数: 20
投稿日時: 2005-01-21 11:46
とっちんさん、早速のお返事ありがとうございます。

確かに
二つのテーブルをJOINしてDataSetへ読み込めば良いことだとは思います。
また、
DataSetにリレーションシップを作成する方法も既にやっています。

しかし、
せっかくデータベース上でAとBというテーブル間のリレーションが設定されている
んだから、
DataSetへAとBを読み込むときにそのリレーションの情報が取得できてもよさそうなのに
何故できないんだろう??
と疑問に思っていたわけです。
取得できる情報とできない情報があるなら
たとえばどういうものだろう?かと。

いろいろ探してみたのですが
そのようなことが書いてあるページなどが探せなくて
質問してみました。

もし、知っていたら教えてください。
とっちん
会議室デビュー日: 2004/11/22
投稿数: 18
投稿日時: 2005-01-21 13:17
こんにちは。

Yokoさんのおっしゃる通り、テーブル間のリレーションをDataSetへ自動で設定するという情報は見つかりませんね。
私も、多分できないのだろう程度の予測しかできません。

でも、仮にそれができたとして、勝手にリレーションを張られるよりは、自分で設定したいと思ってしまいますが...。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-21 22:33
 やりたいことだけ考えずに、それが出来ればどういうことになるか、考えてみましょうよ。

 テーブル1とテーブル2があり、それぞれ次のデータが入っているとします。
コード:
テーブル1  テーブル2
ID  DATA    ID  REF  DATA
--  ----    --  ---  ----
 1     1     1    1  %
 2     3     2    2  個
 3     6     3    2  札


これを、DataSet上のテーブルに持ってくるのですが、、、ところでSystem.Data.Common.DbDataAdapter.Fillメソッドは、テーブルを指定できることもご存じですか?これ、テーブル1を全部取って、テーブル2を取ってくれば、問題ないですよね。でも、テーブル2から取ってきたり、テーブル1をWHERE ID=1で取った後にテーブル2を全部持ってきたらどうなります?

 データセットをデザイナで作ってそこにリレーションを張っても、同じ問題が発生するので要注意。

_________________
1

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