0

データ列をデータテーブルに追加しようとすると、次のエラーが発生します:ネストされたリレーションまたは要素列を、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 は変更できません。

4

1 に答える 1

0

仕方がないので、従来のループでコピーすることになりました。Copyとを使用しようとしましCloseたが、同じエラーが発生し続けました。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;
}
于 2014-09-25T15:05:46.693 に答える