数据表ImportRow

时间:2011-06-06 00:44:16

标签: c# .net dataset

DataSet dsUdpated = new DataSet()
DataTable dtUpdated = dsUpdated.Tables.Add();
dtUpdated = dsOriginal.Tables[0].Clone();   // Guarenteed ds.Tables[0] has rows
dsUpdate.Tables[0].ImportRow(row); // row is one of the filtered row in 

但是ImportRow似乎没有添加行! dsUpdate.Tables [0]不包含该行。但是添加了一行。请帮忙!

3 个答案:

答案 0 :(得分:3)

这就是你做错了。

DataTable dtUpdated = dsUpdated.Tables.Add();
dtUpdated = dsOriginal.Tables[0].Clone();

在第一行中,您声明对象并将其初始化为DataSet的Tables集合上的Add操作的结果。在第二行中,您将完全设置为其他内容!

在第一行代码之后,

dtUpdated可以很好地引用内存中与dsUpdated.Tables[0]相同的对象,但变量本身不是对该对象的常量引用。实际上,在第二行中,您已将其设置为另一个对象,即另一个表的Clone()方法的结果。如果变量曾指向与dsUpdated.Tables[0]相同的对象,则它不再存在。它类似于陈述

int x = 5;
x = 6;

在第一行中,x的值为5.在第二行中,您已将该值替换为6.类似地,对于表变量,该值是引用。您已将一个引用替换为另一个引用。有意义吗?

首先克隆表格,然后将该表格添加到数据集中。现在dsUpdated.Tables[0]将包含dsOriginal.Tables[0]的克隆结构,您的导入应该按预期工作。

答案 1 :(得分:2)

请试试这个:

DataTable dt=dsOriginal.Tables[0].Clone(); 
dsUpdated.Tables.Add(dt);
DataTable dtUpdated=dt;

答案 2 :(得分:0)

请先克隆DataTable

DataTable dt=table.Clone();

foreach (DataRow row in table.Select("AirAvail_Id=0"))
{                     
    dtAirAvail.ImportRow(row);
}

这样可以正常工作。