- - PR -
ADO.NETのリレーションシップの読み取りについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-09-24 19:17
現在、VB.netでアクセスファイルを読み込んで、
アクセスのデータ情報を読み出すプログラムを作っています。 その中でテーブル間のリレーションシップの取得をしようと思うのですが、 上手くいきません。 ADO.netの本を読み、調べたのですが、 DataSetにリレーションシップを作成するサンプルは載っていても データベースからリレーションシップを読み取るサンプルが載っていません。 どうすればリレーションシップを読み出すにはどうすればいいのでしょうか? | ||||
|
投稿日時: 2003-09-27 18:41
自己レスです。
Accessのシステムオブジェクトに MSysRelationshipというテーブルがあり、 そのテーブルにリレーションデータが格納されてる事を知りました。 しかしそのテーブルを読み取りに行くと System.OleDb.OleDbException: 'MSysRelationships' の読み取り権限がないので、 レコードを読み取る事ができません。と言われ エラーが出て読み取れません。 WindowsXPで管理者権限で繋いでいます。 どんな情報でもいいのでお願いします!! | ||||
|
投稿日時: 2005-01-21 10:57
質問に便乗させてください。
私も、 SQLServerのデータベースで テーブル間に設定したリレーションシップを ADO.NETでDataSetへ読み取ることができるのかどうか知りたいと思っています。 DB上でリレーションシップの設定がされている 二つのテーブルをデザイナへドラッグしてきて データセットを作成してみたのですが、 リレーションの設定までは読み込まれていないようなので できなさそうだとは思っているのですが、 確信がもてません。 逆にリレーションシップ以外で どのような情報なら読み込むことができるのか まとめておきたいと思います。 知っている方がいらっしゃいましたら (またはそのような情報載っているページなど) よろしくお願いします。 | ||||
|
投稿日時: 2005-01-21 11:13
こんにちは。
SQL文のJOINを使って取得するのが手っ取り早いような気がしますが...。 DataSetのDataTableに各々のテーブルを読み込んだ後にリレーションを設定する方法であれば http://www.atmarkit.co.jp/fdotnet/dotnettips/137multisel/multisel.html | ||||
|
投稿日時: 2005-01-21 11:46
とっちんさん、早速のお返事ありがとうございます。
確かに 二つのテーブルをJOINしてDataSetへ読み込めば良いことだとは思います。 また、 DataSetにリレーションシップを作成する方法も既にやっています。 しかし、 せっかくデータベース上でAとBというテーブル間のリレーションが設定されている んだから、 DataSetへAとBを読み込むときにそのリレーションの情報が取得できてもよさそうなのに 何故できないんだろう?? と疑問に思っていたわけです。 取得できる情報とできない情報があるなら たとえばどういうものだろう?かと。 いろいろ探してみたのですが そのようなことが書いてあるページなどが探せなくて 質問してみました。 もし、知っていたら教えてください。 | ||||
|
投稿日時: 2005-01-21 13:17
こんにちは。
Yokoさんのおっしゃる通り、テーブル間のリレーションをDataSetへ自動で設定するという情報は見つかりませんね。 私も、多分できないのだろう程度の予測しかできません。 でも、仮にそれができたとして、勝手にリレーションを張られるよりは、自分で設定したいと思ってしまいますが...。 | ||||
|
投稿日時: 2005-01-21 22:33
やりたいことだけ考えずに、それが出来ればどういうことになるか、考えてみましょうよ。
テーブル1とテーブル2があり、それぞれ次のデータが入っているとします。
これを、DataSet上のテーブルに持ってくるのですが、、、ところでSystem.Data.Common.DbDataAdapter.Fillメソッドは、テーブルを指定できることもご存じですか?これ、テーブル1を全部取って、テーブル2を取ってくれば、問題ないですよね。でも、テーブル2から取ってきたり、テーブル1をWHERE ID=1で取った後にテーブル2を全部持ってきたらどうなります? データセットをデザイナで作ってそこにリレーションを張っても、同じ問題が発生するので要注意。 _________________ |
1