错误"无法添加嵌套关系"在尝试将标识数据列添加到XML中的数据表时?

时间:2014-09-25 14:23:39

标签: c# .net datatable system.data.datatable

尝试将数据列添加到数据表时出现以下错误:无法将嵌套关系或元素列添加到包含SimpleContent列的表中。当我点击此代码时会发生这种情况第一次mt.Columns.Add("IdentityId", typeof(int));

奇怪的是,当我在上一个错误之后查看调试器中的数据表时,列就在那里。当我点击继续时,错误是:名为“IdentityId”的列已经属于此DataTable。它似乎添加了它,然后生成错误。

以下是代码:

XElement doc = XElement.Load(XmlFileName);
string TextToFind = "Some Text";
IEnumerable<XElement> query1 = doc.Descendants("desc").Where(c => c.Value == TextToFind).Ancestors("re");
IEnumerable<XElement> query2 = query1.First().Parent.ElementsAfterSelf("ti");
string xml = query2.First().ToString();
stream = new StringReader(xml);
reader = new XmlTextReader(stream);
xmlDataset.ReadXml(reader);
DataTable mt = xmlDataset.Tables["mt"];
DataColumn dc = mt.Columns.Add("IdentityId", typeof(int));
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;

我知道它与数据表来自XML的事实有关,而我发现的少数解决方案更多地使用xml而不是数据表。无法更改XML。

1 个答案:

答案 0 :(得分:0)

由于没有帮助,我最终使用传统循环进行复制。我尝试使用CopyClose,但我一直收到同样的错误。 MSDN能够指导我完成解决方案:

private DataTable ConvertToRegularDataTable(DataTable source)
{
    DataTable result = new DataTable();

    foreach (DataColumn c in source.Columns)
    {
        result.Columns.Add(c.ColumnName, typeof(string));
    }
    DataColumn dc = new DataColumn("ID"); // table.Columns.Add("IdentityId", typeof(int));
    dc.AutoIncrement = true;
    dc.AutoIncrementSeed = 1;
    dc.AutoIncrementStep = 1;
    result.Columns.Add(dc);

    foreach (DataRow dr in source.Rows) 
    {
        result.Rows.Add(dr.ItemArray);
    }
    return result;
}