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

ExportData.hasChanges() 常に false を返します。なんで?多くの新しいレコードが挿入されているため、true を返す必要があります。

4

4 に答える 4

2

最後DataAdapter.Fillに行うことは を呼び出すことだからAcceptChangesです。この動作はAcceptChangesDuringFillプロパティ (デフォルトtrue) で変更できます。

一般に、RowStateは、このレコードをどう処理するかを決定するために使用されます。DataTable に新しいレコードを追加すると、 にRowState変わりAddedます。これで、DataAdapter は、このテーブルを更新する必要があるときに何をすべきかを知ることができます。

しかし、実際には新しいレコードを追加していないため、デフォルトが ではない場合、すべてのレコードが 2 倍になります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 に変更があるかどうかを示す値を取得します。

DB から読み取る場合、データセットは DB の観点からは変更されていません。つまり、データベースにあるものを正確に持っています。つまり、「クリーン」です。データセット内のデータを追加、変更、または削除すると、データセットは「ダーティ」になり、HasChangesを返し始めtrueます。

于 2013-01-25T10:49:40.213 に答える
0

データセットに変更を加え、 を呼び出さなかった場合、この値は true になります"DataSet.AcceptChanges"RejectChangesそれまでの間、最後に呼び出されたときにロールバックするために呼び出すことができますAcceptChanges

于 2013-01-25T11:06:56.970 に答える