无法检查数据集中已更改的行
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 都将大于您上次执行时存储的行。
我的程序中有一个 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 都将大于您上次执行时存储的行。