C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

datasetのXML出力時のネストについて教えて下さい。


(過去ログ 114 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■67493 / inTopicNo.1)  datasetのXML出力時のネストについて教えて下さい。
  
□投稿者/ s-iNoUe (1回)-(2013/08/06(Tue) 16:00:25)

分類:[C#] 

こんにちは。
現在データセットの内容をXMLに出力するアプリを作成しております。
単純にXMLを出力する事はできているのですが、出力されたXMLの内容でネストの部分がうまく出す事ができません。
いろんなサイトを調べてみたのですが、有力な情報無く(探しきれていないかもしれませんが。)こちらに書き込みさせて頂きました。以下のサイトの情報を参考にしています。
http://forums.asp.net/t/1278671.aspx/1

現在の状況を提示します。

[TABLE1]
ID----Name----NUMBER
0001 Car1 900-01
0002 Car2 900-02
0003 Car3 900-03
0004 Car4 900-04

[TABLE2]外部キーIDでTABLEと1対多でつながります。
EquimentID--ID----PARENTID--NAME
000001 0001 000001 Door
000002 0001 000001 Engine
000003 0001 000001 Window
000004 0001 000001 Tire
000005 0002 000005 Engine
000006 0002 000005 Tire
000007 0003 000007 Door
000008 0003 000007 Window

[DB接続及びリレーションPG]

private void button1_Click(object sender, EventArgs e)
{
String connStr = "Persist Security Info=False;User ID=wheel;Password=zMs9DzB75Y;Initial Catalog=WheelDB;Server=phoenix02";

String sql = GetCarSQL().ToString();
String sql2 = GetCarStockedEquipment().ToString();

SqlConnection conn = new SqlConnection(connStr);
SqlCommand comm =new SqlCommand(sql, conn);
SqlCommand comm2 = new SqlCommand(sql2, conn);

SqlDataAdapter CarAdapter = new SqlDataAdapter(comm);
SqlDataAdapter CarEquipmentAdapter = new SqlDataAdapter(comm2);

ds = new DataSet();
ds.DataSetName = "vehicles";

//---open the connection and fill the dataset---
conn.Open();

//---fill the dataset---
CarAdapter.Fill(ds, "vehicle");
CarEquipmentAdapter.Fill(ds, "features");

//---close the connection---
conn.Close();

//---bind to the DataGridView control---
dataGridView1.DataSource = ds;

//---set the table in the dataset to display---
dataGridView1.DataMember = "vehicle";

DataRelation relation = new DataRelation("carstock", ds.Tables["vehicle"].Columns["CarStockID"], ds.Tables["features"].Columns["CarStockID"], true);
relation.Nested = true;
ds.Relations.Add(relation);
}
[XML出力時の処理]
private void button2_Click(object sender, EventArgs e)
{
ds.Tables["vehicle"].Columns["ID"].ColumnMapping = System.Data.MappingType.Hidden;
ds.Tables["features"].Columns["EquipmentID"].ColumnMapping = System.Data.MappingType.Hidden;
ds.Tables["features"].Columns["ID"].ColumnMapping = System.Data.MappingType.Hidden;
ds.Tables["features"].Columns["PARENTID"].ColumnMapping = System.Data.MappingType.Hidden;

ds.WriteXml("C:\\Users\\472\\Desktop\\hogehoge.xml");
MessageBox.Show("XMLへの出力が完了しました!!");
}


[現在の出力結果]
<?xml version="1.0" standalone="yes"?>
<vehicles>
<vehicle>
<ID>0001</ID>
<Name>Car1</Name>
<features>
<NAME>Door</NAME>
</features>
<features>
<NAME>Engine</NAME>
</features>
<features>
<NAME>Window</NAME>
</features>
<features>
<NAME>Tire</NAME>
</features>
</vehicle>
<vehicle>
<ID>0002</ID>
<Name>Car2</Name>
<features>
<NAME>Engine</NAME>
</features>
<features>
<NAME>Tire</NAME>
</features>
</vehicle>
<vehicle>
<ID>0003</ID>
<Name>Car3</Name>
<features>
<NAME>Door</NAME>
</features>
<features>
<NAME>Window</NAME>
</features>
</vehicle>
</vehicles>

[出力したい形]
<?xml version="1.0" standalone="yes"?>
<vehicles>
<vehicle>
<ID>0001</ID>
<Name>Car1</Name>
<features>
<NAME>Door</NAME>
<NAME>Engine</NAME>
<NAME>Window</NAME>
<NAME>Tire</NAME>
</features>
</vehicle>
<vehicle>
<ID>0002</ID>
<Name>Car2</Name>
<features>
<NAME>Engine</NAME>
<NAME>Tire</NAME>
</features>
</vehicle>
<vehicle>
<ID>0003</ID>
<Name>Car3</Name>
<features>
<NAME>Door</NAME>
<NAME>Window</NAME>
</features>
</vehicle>
</vehicles>

上記の形を出そうと思い、TABLE2の中でリレーションを組むために
IDとPARENTIDを設けて以下の構文を追加しましたが、

DataRelation relation2 = new DataRelation("equipment", ds.Tables["features"].Columns["ID"], ds.Tables["features"].Columns["PARENTID"], true);
relation2.Nested = true;
ds.Relations.Add(relation2);

「入れ子になった 2 つのリレーションシップでは、同じテーブル 'xxxxxxx' を子テーブルにすることはできません。」
と出てしまいます。
どなたか、解決方法もしくは、ヒントとなるサイトでも構いません。
ご教授願えると助かります。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -