DataSet exportData = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(getOutput);
da.Fill(exportData);
exportData.HasChanges()
ExportData.hasChanges()
常に false を返します。なんで?多くの新しいレコードが挿入されているため、true を返す必要があります。
最後DataAdapter.Fill
に行うことは を呼び出すことだからAcceptChanges
です。この動作はAcceptChangesDuringFill
プロパティ (デフォルトtrue
) で変更できます。
一般に、RowState
は、このレコードをどう処理するかを決定するために使用されます。DataTable に新しいレコードを追加すると、 にRowState
変わりAdded
ます。これで、DataAdapter は、このテーブルを更新する必要があるときに何をすべきかを知ることができます。
しかし、実際には新しいレコードを追加していないため、デフォルトが ではない場合、すべてのレコードが 2 倍になりますAcceptChangesDuringFill
。
これを使用してみてくださいAcceptChangesDuringFill
DataSet exportData = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(getOutput);
da.AcceptChangesDuringFill = false;
da.Fill(exportData);
exportData.HasChanges();
の意味を誤解していHasChanges
ます。を求めるときHasChanges
、あなたは
新しい行、削除された行、変更された行など、DataSet に変更があるかどうかを示す値を取得します。
DB から読み取る場合、データセットは DB の観点からは変更されていません。つまり、データベースにあるものを正確に持っています。つまり、「クリーン」です。データセット内のデータを追加、変更、または削除すると、データセットは「ダーティ」になり、HasChanges
を返し始めtrue
ます。
データセットに変更を加え、 を呼び出さなかった場合、この値は true になります"DataSet.AcceptChanges"
。RejectChanges
それまでの間、最後に呼び出されたときにロールバックするために呼び出すことができますAcceptChanges
。