无法检查数据集中已更改的行

Unable to check for changed rows in a dataset

我的程序中有一个 table,它存储有关消息的信息,并希望检测何时向其中添加了新信息。我这样做的原因是因为我只想在有新数据时向用户显示新数据,而不是必须不断获取所有行并显示它们。

我决定这样做的方法是通过使用 dataSet.HasChanged() 函数,该函数本质上应该检查数据集是否有任何新行和一个名为 DataChanged returns [=23= 的函数]() 值。

然而,我使用的函数总是returns 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();
}

从未检测到出于某种原因的更改,因此即使在我向数据集添加新记录后,此函数始终 returns 错误。

提供第一段中解释的功能的替代方法将非常有帮助,而且我当前方法的修复更是如此。

这是一个简单的方法。

确保每个 table 您希望跟踪的更改都存在一个 Timestamp/Rowversion 列。

Return 当前数据库 调用程序的时间戳作为数据结果集的一部分(在本例中为 DataSet)。例如,将以下查询添加到您的结果集中。

SELECT @@DBTS;

下次您 运行 您的查询时使用此返回值,并根据需要将以下内容添加到现有 WHERE 子句中。

...
AND (@LastRowversionValue IS NULL
    OR TableName.RowversionColumn > @LastRowversionValue)
...

第一次查询时为@LastRowversionValue 传递 NULL 运行 启动进程。

自您上次检索数据以来 table(s) 中 inserted/updated 的任何行的 Rowversion 都将大于您上次执行时存储的行。