Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XDocument到dataSet,我的嵌套节点是否被视为新表?_C#_Sql Server_Xml_Linq_Ado.net - Fatal编程技术网

C# XDocument到dataSet,我的嵌套节点是否被视为新表?

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

当循环遍历元素时,它认为子节点是一个表,而它应该只是一个列。我的大部分代码都工作得很好,直到我看到代码的这一部分:(我所有的代码都在底部)

编辑在我开始将XML放入数据集中之前,它是这样的

<!--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))