数据集添加到数据集异常

时间:2011-02-18 10:38:15

标签: c# datatable

DataSet ds = DAL.GetData();
DataSet dsInvitee = null;

DataTable dt = ds.Tables[0].Copy();
IEnumerable<DataRow> q1 = dt.AsEnumerable().Skip(5).Take(10);

dsInvitee = new DataSet();

DataTable dtNew = new DataTable();
dtNew.TableName = "DTInv";
dtNew = q1.CopyToDataTable<DataRow>();
dsInvitee.Tables.Add(dtNew.Copy());
dsInvitee.AcceptChanges();

dtNew = null;
dtNew = new DataTable();
dtNew.TableName = "DTTags";
dtNew = ds.Tables[1].Copy();
dsInvitee.Tables.Add(dtNew.Copy());

我在最后一行收到错误,因为“名为'Table1'的DataTable已经属于这个DataSet。”......请帮忙。

3 个答案:

答案 0 :(得分:2)

您的问题是因为dtNew = q1.CopyToDataTable<DataRow>();行,因为CopyToDataTable扩展方法:

  

给定输入IEnumerable对象,其中泛型参数T为DataRow,返回包含DataRow对象副本的DataTable。

这意味着在调用CopyToDataTable之后,“DTInv”的表名会被吹走,dtNew不再引用相同的DataTable。在致电dtNew.TableName = "DTInv";

之后,将CopyToDataTable移至
DataTable dtNew = new DataTable();
dtNew = q1.CopyToDataTable<DataRow>();
dtNew.TableName = "DTInv";
dsInvitee.Tables.Add(dtNew.Copy());
dsInvitee.AcceptChanges();

答案 1 :(得分:1)

我认为问题在于倒数第二行。您正在覆盖实例dtNew。到目前为止,您使用该实例执行的所有操作都将丢失,并且会从原始数据集中为其分配一个表,这是您要添加到最后一行中的数据集的内容...

答案 2 :(得分:1)

根据Daniel上面所说的,尝试交换

的顺序
dtNew.TableName = "DTTags";

dtNew = ds.Tables[1].Copy();

围绕着。