DataSet exportData = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(getOutput);
da.Fill(exportData);
exportData.HasChanges()
ExportData.hasChanges()
总是返回false。为什么?它应该返回true,因为它插入了很多新记录。
答案 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
。