DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataSet.Select

  • 題名: DataSet.Select
  • 著者: みか
  • 日時: 2005/08/06 11:08:24
  • ID: 12093
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[VB.NET,]
分類:[.NET]

2005/08/06(Sat) 11:42:47 編集(投稿者)

はじめて、質問させていただきます。
VB6から移行してきて、DataSet,DataRowを使いはじめ
かなり混乱しているので、助けていただけたらと思います。


現在、次のようなXMLを作成しています。
<AAA>
    <COLUMN>
        <ID>100</ID>
        <TITLE>こっちだよ</TITLE>
        <MESSAGES>
           <MESSAGE>あいうえお</MESSAGE>
           <MESSAGE>かきくけこ</MESSAGE>           
        </MESSAGES>
    </COLUMN>
    <COLUMN>
        <ID>101</ID>
        <TITLE>あっちだよ</TITLE>
        <MESSAGES>
           <MESSAGE>たたた</MESSAGE>  
        </MESSAGES>
    </COLUMN>
</AAA>


IDを指定して、タイトルとメッセージを取得したいと
考えています。メッセージは、行数が不定です。
次のように作ってみましたが、<MESSAGE>の取得方法が
わかりません。タイトルは取得できます。

   dim dr as DaaRow()
   dr = ds.Tables("COLUMN").Select("ID=100")
    Console.WriteLine(dr(0)("TITLE"))


よろしくお願いします。
なにをしたいかはっきりしないのですが

dr = ds.Tables("COLUMN").Select("ID='100'")
では?
2005/08/06(Sat) 11:39:19 編集(投稿者)

すいません。わかりにくかったですか・・。

dr = ds.Tables("COLUMN").Select("ID='100'")

現在、DataRowの内容は取れています。
取得したdrから、タイトル<TITLE>の内容を取るところはできますが、
メッセージ群<MESSAGES>の中のメッセージ<MESSAGE>を取れなくて困っています。
はじめまして。なおこです。
答えになってないので済みません。

多分,みかさんがやりたい事を実現するには
DataRelationを使わないと不可能ではないかと思います。
(違ってたらすみません)

Dataset.ReadXmlを使われているのではないかと思いますが,
別の方法で,XmlTextReader等でXMLファイルのデータを読み込んで,
必要ならばDataTableに格納したり,
さらにそれをDataSetにバインドするのはどうでしょうか。
(そこでDataRelationを使ってリレーションを張ったり…とか)

参考)http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemxmlxmltextreaderclassreadtopic.asp

#ちなみに,私も興味本位でやってみたのですが,
#Relationが正しく張られていないのでMESSAGEが全部出ちゃいますw

Dim ds As DataSet = New DataSet
Dim dt As DataTable
Dim rows() As DataRow

ds.ReadXml("test.xml") 'ttp://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=12093&rev=&no=0のXML
dt = ds.Tables("COLUMN")
rows = dt.Select("ID='100'")

Dim MessagesDT As DataTable = dt.ChildRelations(0).ChildTable
Dim MessageDT As DataTable = MessagesDT.ChildRelations(0).ChildTable

For Each row As DataRow In MessageDT.Rows
Trace.WriteLine(row(0))
Next
こんな方法は、どうでしょう?かっこ悪いかな?

Dim dr As DataRow
dr = ds.Tables("MESSAGE").Rows(1)
Console.WriteLine(dr(0))

この場合は、Row(1)だから、「かきくけこ」が取れます。と思います。
間違っていたらごめんなさい。おそらくMESSAGEテーブルが下記のようになっていると思われます。(データグリッドに表示して確かめました。)

     MESSAGE
0行目  あいうえお
1行目  かきくけこ
2行目  たたた

ダメならごめんなさい。
なおこさん、ありがとうございます。
やっぱりDataRetationを使わないとだめですよね。。
ヘルプを読んでみて、難しそうだったので逃げていたのですが・・
やってみたいと思います。

> #ちなみに,私も興味本位でやってみたのですが,
> #Relationが正しく張られていないのでMESSAGEが全部出ちゃいますw
そうなんです。。
  • 題名: Re[5]: DataSet.Select
  • 著者: みか
  • 日時: 2005/08/11 8:41:23
  • ID: 12161
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
かんさん、ありがとうございます

Selectでデータを抽出してから、MESSAGEを取りたいのですが、
dr = ds.Tables("COLUMN").Select("ID='100'")
Selectで取れる戻り値は、DataRowなので、

> dr = ds.Tables("MESSAGE").Rows(1)

これができませんでした。
  • 題名: Re[5]: DataSet.Select
  • 著者: かん
  • 日時: 2005/08/11 8:57:02
  • ID: 12162
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
2005/08/11(Thu) 08:59:29 編集(投稿者)
2005/08/11(Thu) 08:59:18 編集(投稿者)

>Selectでデータを抽出してから、MESSAGEを取りたいのですが、
>dr = ds.Tables("COLUMN").Select("ID='100'")
>Selectで取れる戻り値は、DataRowなので、

> dr = ds.Tables("MESSAGE").Rows(1)

>これができませんでした。

残念です。こちらでは取れたのですが。なぜだろう?
ひょっとして、この場合は、drを配列にしてませんよね?

'@
Dim dr As DataRow()
dr = ds.Tables("COLUMN").Select("ID='100'")
Console.WriteLine(dr(0)("TITLE"))
'A
Dim row As DataRow
row = ds.Tables("MESSAGE").Rows(2)
Console.WriteLine(row(0))


こんな感じですが。
しつこくて、すいません。

DOBON.NET | プログラミング道 | プログラミング掲示板