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

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

4

4 回答 4

2

因为最后DataAdapter.Fill要做的就是调用AcceptChangesAcceptChangesDuringFill您可以使用属性(默认)更改此行为true

通常,RowState用于确定如何处理此记录。如果您将新记录添加到 DataTable,它将RowState更改为Added. 现在,DataAdapter 将知道何时应该更新此表。

但是因为实际上您还没有添加新记录,所以如果默认值不是AcceptChangesDuringFill.

于 2013-01-25T10:45:43.220 回答
1

试试这个AcceptChangesDuringFill

 DataSet exportData = new DataSet();
 SqlDataAdapter da = new SqlDataAdapter(getOutput);
 da.AcceptChangesDuringFill = false;
 da.Fill(exportData);
 exportData.HasChanges();
于 2013-01-25T10:48:50.980 回答
1

你误解了 的意思HasChanges。当你要求时HasChanges,你

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

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

于 2013-01-25T10:49:40.213 回答
0

如果您对数据集进行了更改并且没有调用 ,则此值变为真"DataSet.AcceptChanges"。在此期间你可以调用RejectChanges回滚到最后一次AcceptChanges被调用。

于 2013-01-25T11:06:56.970 回答