如何从数据库中读取所有新行



我正在尝试读取在计时器上添加到数据库的所有新行。

首先,我读取了整个数据库并将其保存到本地数据表,但是我想读取所有添加到数据库的新行。这是我尝试阅读新行的方式:

string accessDB1 = string.Format("SELECT * FROM {0} ORDER BY ID DESC", tableName);
setupaccessDB(accessDB1);
int dTRows = localDataTable.Rows.Count + 1;
localDataTable.Rows.Add();
using (readNext = command.ExecuteReader())
{
    while (readNext.Read())
    {
        for (int xyz = 0; xyz < localDataTable.Columns.Count; xyz++)
        {
            // Code
        }
        break;
    }
}

如果在计时器中只添加了1行,则可以正常工作,但是当添加多个行时,仅读取最新的行。

所以有什么方法可以阅读所有添加的行。

我正在使用OledbDataReader

预先感谢

对于大多数表来说,主键是基于增量值。这可能是一个非常简单的整数,它会被一个增量,但也可以是基于DateTime的GUID。

无论如何,如果您知道上一个记录的ID。您可以简单地要求所有具有"更高" ID的记录。这样,您确实获得了新的记录,但是更新的记录呢?如果您也想要那些,则可能要使用包含DateTime值的列。

更棘手的是从数据库中删除的记录。您无法检索那些基本查询的人。您可以通过为从数据库中检索的每个记录设置一个TTL来解决该问题,就像缓存一样。当记录"过期"时,您会尝试再次检索。

Microsoft SQL Server(例如Microsoft SQL Server)的一些数据库还为此提供了更高级的选项。您可以通过代理服务使用查询通知,也可以在数据库上启用更改跟踪。最后一个甚至可以指示每个记录的最后一个动作是什么(插入,更新或删除)。

您的直接问题在这里:

while (readNext.Read())
{
    doSomething();
    break;
}

这是您的循环基本上归结为。break在处理第一个项目后将退出循环,无论有多少个项目。

在这种情况下,第一个项目可能是最后一个添加的(如您所述),因为您是通过下达ID进行排序的。

仅读取新添加的行,有多种方法可以做到这一点,有些将取决于您正在使用的DBM。

也许最简单,最便携的是添加一个额外的列processed,该列将首先添加时设置为false。

这样,您可以简单地找到查找这些记录的查询,并为每个记录进行处理并将列设置为true。

实际上,您可以使用触发器来执行此操作(在插入时将标志迫使标志false),这也打开了使用更新的可能性。

跟踪删除更加困难,但仍然可以实现。您可以有一个触发器,它实际上将记录写入单独的表之前,然后删除它,以便您的处理代码也可以访问这些详细信息。

以下工作

using (readNext = command.ExecuteReader())
{
    while (readNext.Read())
    {
        abc = readNext.FieldCount;
        for (int s = 1; s < abc; s++)
        {
            var nextValue = readNext.GetValue(s);
        }
    }
}

For Loop读取当前行,然后While Loop移至下一个行

相关内容

  • 没有找到相关文章

最新更新