无法在数据集中
问题描述:
检查更改的行我有我的计划,存储有关消息的信息,并希望在新信息已被添加到其检测范围内的表。我这样做的原因是因为我想只在有新数据时才向用户显示新数据,而不是不断地获取所有行并显示它们。无法在数据集中
我决定这样做的方式是通过使用dataSet.HasChanged()函数,该函数本质上应该检查数据集是否有任何新行以及名为DataChanged的函数是否返回dataSet.HasChanged()值。
不过,我一直使用的函数返回false(即使有变化)
下面是函数...从来没有检出,因此该功能
public bool DataChanged(string Table)
{
//This is the variable that will be returned
bool ChangesMade;
//Create the adapter
OleDbDataAdapter adapter = new OleDbDataAdapter(Table, connector);
//Clear the current data in the dataset
dataSet.Clear();
//Open the connection and fill the dataset
connector.Open();
adapter.Fill(dataSet, "TableData1");
connector.Close();
return ChangesMade = dataSet.HasChanges();
}
变化出于某种原因即使向数据集添加新记录后,也总是返回false。
,它提供的功能段解释之一将是非常有益的,我现在的方法的固定变得更是这样一种替代方法。
答
这是一个简单的方法来做到这一点。
确保时间戳/ Rowversion列中存在您要跟踪对每个表。
返回当前数据库的时间戳到您的调用程序为您的数据的部分结果集(在这种情况下,数据集)。例如,将以下查询添加到结果集中。
SELECT @@DBTS;
下次运行查询时使用此返回值,并将以下内容添加到现有的WHERE子句中。
...
AND (@LastRowversionValue IS NULL
OR TableName.RowversionColumn > @LastRowversionValue)
...
传递null为@LastRowversionValue第一次查询跑到获得进程开始。更新到,因为你检索的数据最后一次表(一个或多个),其被插入
任何行/,将具有比你从最后执行存储在一个更大的Rowversion。