Reputation: 272
I'm trying to add a column to a datatable within a dataset in C# (the dataset is read from an XML document). It seems that, if I name the column, I receive a DuplicateNameException when trying to add it. If I leave the column unnamed, it gets added to the datatable. It doesn't seem to matter what the name of the column actually is; just whether the Datatable.ColumnName property is defined.
Here is the relevant code block (xR is a previously defined XmlTextReader, and this is all in a while xR.Read() loop):
xR.ReadToDescendant(this.calDataTag);
XmlReader xS = xR.ReadSubtree();
ds.ReadXml(xS);
foreach (DataTable dt in ds.Tables)
{
if (dt.Columns.Contains("offset"))
{
if (dt.TableName == "Single")
{
DataColumn c1 = new DataColumn();
c1.Caption = "TipType";
c1.ColumnName = "whatever";
dt.Columns.Add(c1);
}
foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn dc in dt.Columns)
{
outString.Add("Table: " + dt.TableName.ToString() + " Column: " + dc.ColumnName.ToString() + " RowVal: " + dr[dc] + " " + dt.Columns.Contains("whatever"));
}
}
}
}
Interestingly, the dt.Columns.Contains("whatever") part of the string always returns False. So this is not a true DuplicateNameException. I'm sure I'm just implementing the Columns.Add method improperly. Any advice is appreciated.
Upvotes: 1
Views: 4564
Reputation: 44595
seems to me you are checking the wrong conditions or at least you are not covering yourself enough, instead of doing this:
if (dt.Columns.Contains("offset"))
{
if (dt.TableName == "Single")
why don't do:
if (dt.TableName == "Single" && !dt.Columns.Contains("whatever") && dt.Columns.Contains("offset"))
{
var c1 = new DataColumn();
c1.Caption = "TipType";
c1.ColumnName = "whatever";
dt.Columns.Add(c1);
}
then you have to put your outString
generation wherever it fits, this code should at least be easier to debug and you can find what is going on quicker.
Upvotes: 1