C# XDocument到dataSet,我的嵌套节点是否被视为新表?
当循环遍历元素时,它认为子节点是一个表,而它应该只是一个列。我的大部分代码都工作得很好,直到我看到代码的这一部分:(我所有的代码都在底部) 编辑在我开始将XML放入数据集中之前,它是这样的C# XDocument到dataSet,我的嵌套节点是否被视为新表?,c#,sql-server,xml,linq,ado.net,C#,Sql Server,Xml,Linq,Ado.net,当循环遍历元素时,它认为子节点是一个表,而它应该只是一个列。我的大部分代码都工作得很好,直到我看到代码的这一部分:(我所有的代码都在底部) 编辑在我开始将XML放入数据集中之前,它是这样的 <!--Created: 8/4/2010 8:28:10 AM--> <Trips> <TBL_TripDetails> <DepartureDate>2/2/2010</DepartureDate> <ReturnDat
<!--Created: 8/4/2010 8:28:10 AM-->
<Trips>
<TBL_TripDetails>
<DepartureDate>2/2/2010</DepartureDate>
<ReturnDate>2/2/2010</ReturnDate>
<TripTypeA>1</TripTypeA>
<TripTypeB>2</TripTypeB>
<PurposeOfTrip>vacation</PurposeOfTrip>
<RegionID>2</RegionID>
<OverallRating>0</OverallRating>
<SupplierID>3</SupplierID>
<SupplierComment>great supplier</SupplierComment>
<FoodRating>0</FoodRating>
<CulinaryComments></CulinaryComments>
<RecommendRestaurant>false</RecommendRestaurant>
<AttractionDisappoint>false</AttractionDisappoint>
<TripRecommendation>false</TripRecommendation>
</TBL_TripDetails>
<TBL_Magic_TripCountries>
<CountryCode>USA</CountryCode>
<CountryCode>CND</CountryCode>
</TBL_Magic_TripCountries>
<TBL_Cities>
<City>New York</City>
<City>Ottawa</City>
<City>Las Vegas</City>
</TBL_Cities>
<TBL_Magic_TripTransportation>
<TransportType>3</TransportType>
<TransportType>4</TransportType>
</TBL_Magic_TripTransportation>
</Trips>
2/2/2010
2/2/2010
1.
2.
假期
2.
0
3.
大供应商
0
假的
假的
假的
美国
CND
纽约
渥太华
拉斯维加斯
3.
4.
我不能确定这是原因,但是
lstCountry.Items
.Cast<ListItem>()
.Where(i=> i.Selected)
.Select(x => new XElement("CountryCode", x.Value))
lstCountry.Items
.Cast()
.其中(i=>i.Selected)
.选择(x=>new-XElement(“CountryCode”,x.Value))
RET运行IEnumerable,并将被数据集解释为多重性为0的元素。。∞. 数据集将在内部将该元素转换为表,因为这是数据集处理嵌套关系的方式。我不确定最终是两个表(“TBL_Magic_TripCountries”与主表关联,然后“CountryCode”与之关联)还是一个表“TBL_Magic_TripCountries”,其中CountryCode是唯一的列。我已经很久没有处理自动模式生成的数据集了 啊,我明白你的意思,不幸的是,我不知道如何用我的代码来解决这个问题。也许我最好使用XmlDocument而不是XDocument:(如果您有其他方法,请告诉我,无论使用XDocument还是XmlDocument,您都会遇到同样的问题,因为无论哪种方法,您的XML结构都是相同的。问题是数据集将嵌套元素踢入相关的表结构中。您可以使用dataset relationship方法对其进行导航,但它在内部是一个表。hmm,因此在我的示例是,如果TBL_Magic_TripCountries内部认为它是一个tabel,我将如何将其插入到带有国家代码的TBL_Magic_TripCountries中?感谢您的帮助!请查看表的元数据。由于它是嵌套的XML,因此表中可能会添加一列,以形成与外部表的关系(在本例中为“TBL_Magic_TripCountries”)。无论是否有键列,实际插入只需在表“CountryCodes”中添加值即可。
DataSet ds = new DataSet();
ds.ReadXml(xDoc.CreateReader());
string StrConn = ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
SqlConnection cnn = new SqlConnection(StrConn);
SqlBulkCopy blkcopy = new SqlBulkCopy(cnn);
cnn.Open();
foreach (DataTable dt in ds.Tables)
{
BulkCopyTable(dt, blkcopy);
}
<!--Created: 8/4/2010 8:28:10 AM-->
<Trips>
<TBL_TripDetails>
<DepartureDate>2/2/2010</DepartureDate>
<ReturnDate>2/2/2010</ReturnDate>
<TripTypeA>1</TripTypeA>
<TripTypeB>2</TripTypeB>
<PurposeOfTrip>vacation</PurposeOfTrip>
<RegionID>2</RegionID>
<OverallRating>0</OverallRating>
<SupplierID>3</SupplierID>
<SupplierComment>great supplier</SupplierComment>
<FoodRating>0</FoodRating>
<CulinaryComments></CulinaryComments>
<RecommendRestaurant>false</RecommendRestaurant>
<AttractionDisappoint>false</AttractionDisappoint>
<TripRecommendation>false</TripRecommendation>
</TBL_TripDetails>
<TBL_Magic_TripCountries>
<CountryCode>USA</CountryCode>
<CountryCode>CND</CountryCode>
</TBL_Magic_TripCountries>
<TBL_Cities>
<City>New York</City>
<City>Ottawa</City>
<City>Las Vegas</City>
</TBL_Cities>
<TBL_Magic_TripTransportation>
<TransportType>3</TransportType>
<TransportType>4</TransportType>
</TBL_Magic_TripTransportation>
</Trips>
lstCountry.Items
.Cast<ListItem>()
.Where(i=> i.Selected)
.Select(x => new XElement("CountryCode", x.Value))