我想使用dataset.readXML(filename)
将我的xml读入数据集想法是加载2个表,并使用LINQ加入它们并将查询结果转储到sql数据库中。
我有以下xml
<Report>
<Parameters>
<Code>ABC</Code>
<Expiries>
<date>2000-01-01</date>
<time>08:00:00</time>
<reason>The guy liked cake</reason>
</Expiries>
<Expiries>
<date>2002-01-01</date>
<time>08:00:00</time>
<reason>The guy still liked cake</reason>
</Expiries>
</Parameters>
<Parameters>
<Code>BCA</Code>
<Expiries>
<date>2000-01-01</date>
<time>08:00:00</time>
<reason>The guy liked cake</reason>
</Expiries>
<Expiries>
<date>2002-01-01</date>
<time>08:00:00</time>
<reason>The guy still liked cake</reason>
</Expiries>
</Parameters>
</Report>
我将数据表定义为:( addcolumn是添加列的便捷方法)
public DataTable Parameters = new DataTable("Parameters")
.addColumn<string>("Code")
public DataTable Expiries = new DataTable("Parameters")
.addColumn<string>("date")
.addColumn<string>("time")
.addColumn<string>("reason")
然后使用以下内容将其导入表中:
DataSet tds = new DataSet()
tds.Tables.add(Parameters);
tds.Tables.add(Expiries);
tds.ReadXML(file.FullName)
//now a record on tds.tables["Parameters"] will have Code="ABC"
这一切都很出色,但它抛弃了我的到期和我的参数之间的关系。 如果我在不使用已定义列的情况下执行此操作,则会自动在2个表之间创建关系,例如
DataSet tds = new DataSet()
tds.ReadXML(file.FullName)
//now a record on tds.tables["Parameters"] will have Code="ABC", Parameter_Id=0
如何在数据表定义中定义此关系,以便模仿自动生成的架构具有什么?
答案 0 :(得分:2)
假设代码是唯一的,您可以执行以下操作:
DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code");
DataTable Expiries = new DataTable("Expiries")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["Code"], Expiries.Columns["Code"]));
custom.Relations["ParameterExpiries"].Nested = true;
这将为您提供一个expiries表,其中包含从父
定义的代码如果Code不是唯一的,那么您可以在Parameters中创建另一列AutoIncrement = true(例如&#34; ID&#34;)并在父子关系中使用它。然后在Expiries&#34; Code&#34;中添加另一列。它使用表达式&#34; Parent.Code&#34;。
DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code")
.AddColumn<int>("ID");
Parameters.Columns["ID"].AutoIncrement = true;
DataTable Expiries = new DataTable("Expiries")
.AddColumn<int>("ID")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["ID"], Expiries.Columns["ID"]));
custom.Relations["ParameterExpiries"].Nested = true;
Expiries.Columns["Code"].Expression = "Parent.Code";
对于表达式,请参阅:http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v=vs.110).aspx
对于datarelation,请参阅:http://msdn.microsoft.com/en-us/library/system.data.datarelation(v=vs.110).aspx