DataSet exportData = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(getOutput);
da.Fill(exportData);
exportData.HasChanges()
ExportData.hasChanges()
总是返回假。为什么?它应该返回 true,因为它插入了很多新记录。
因为最后DataAdapter.Fill
要做的就是调用AcceptChanges
。AcceptChangesDuringFill
您可以使用属性(默认)更改此行为true
。
通常,RowState
用于确定如何处理此记录。如果您将新记录添加到 DataTable,它将RowState
更改为Added
. 现在,DataAdapter 将知道何时应该更新此表。
但是因为实际上您还没有添加新记录,所以如果默认值不是AcceptChangesDuringFill
.
试试这个AcceptChangesDuringFill
DataSet exportData = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(getOutput);
da.AcceptChangesDuringFill = false;
da.Fill(exportData);
exportData.HasChanges();
你误解了 的意思HasChanges
。当你要求时HasChanges
,你
获取一个值,该值指示 DataSet 是否有 [您的] 更改,包括新的、删除的或修改的行。
当您从数据库中读取数据时,从数据库的角度来看,您的数据集没有改变:它完全具有数据库中的内容,即它是“干净的”。当您在数据集中添加、更改或删除数据时,数据集会变得“脏”,因此HasChanges
开始返回true
.
如果您对数据集进行了更改并且没有调用 ,则此值变为真"DataSet.AcceptChanges"
。在此期间你可以调用RejectChanges
回滚到最后一次AcceptChanges
被调用。