DataSet hasChanges()始终返回false

时间:2013-01-25 10:44:04

标签: c# dataset

DataSet exportData = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(getOutput);
da.Fill(exportData);
exportData.HasChanges()

ExportData.hasChanges()  总是返回false。为什么?它应该返回true,因为它插入了很多新记录。

4 个答案:

答案 0 :(得分:2)

因为DataAdapter.Fill所做的最后一次是致电AcceptChanges。您可以使用AcceptChangesDuringFill属性(默认true)更改此行为。

通常,RowState用于确定如何处理此记录。如果您向DataTable添加新记录,则RowState将更改为Added。现在,DataAdapter会知道在更新此表时该怎么做。

但是因为实际上你还没有添加新记录,如果默认值不是AcceptChangesDuringFill,它会使所有记录加倍。

答案 1 :(得分:1)

使用AcceptChangesDuringFill

尝试此操作
 DataSet exportData = new DataSet();
 SqlDataAdapter da = new SqlDataAdapter(getOutput);
 da.AcceptChangesDuringFill = false;
 da.Fill(exportData);
 exportData.HasChanges();

答案 2 :(得分:1)

你误解了HasChanges的含义。当您要求HasChanges时,您

  

获取一个值,指示DataSet是否有[您的]更改,包括新行,已删除或已修改的行。

当您从数据库中读取数据时,您的数据集从数据库的角度来看是不变的:它具有数据库中的确切数据,即它是“干净的”。当您添加,更改或删除数据集中的数据时,数据集会变得“脏”,因此HasChanges开始返回true

答案 3 :(得分:0)

如果您对数据集进行了更改但未调用"DataSet.AcceptChanges",则此值将变为true。在此期间,您可以致电RejectChanges以回滚到上一次调用AcceptChanges