|
分類:[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' を子テーブルにすることはできません。」 と出てしまいます。 どなたか、解決方法もしくは、ヒントとなるサイトでも構いません。 ご教授願えると助かります。
|