3

我在我的紧凑框架应用程序中使用 sqlite 来记录系统中的事件。我也在使用System.Data.SQLite。事件有时间戳来描述它发生的时间。我将此时间戳作为刻度存储在我的表中。除此列外,该表还包含另外 5 列整数/文本类型。下面是表模式

CREATE TABLE T1 (TimeStamp INTEGER, Col2 INTEGER, Col3 INTEGER, Col4 INTEGER,
                      Col5 INTEGER, Col6 TEXT, PRIMARY KEY(TimeStamp DESC));

我正在使用带有以下查询的 ADO 查询两个时间戳之间的数据

SELECT TimeStamp,Col1,Col2,Col3,Col4,Col5 FROM T1 WHERE TimeStamp 
BETWEEN @startDate AND @endDate LIMIT 2000;

我正在将用户提供的时间戳转换为 Ticks,并将它们作为“@startDate”和“@endDate”的参数值发送。

在我执行了上面的查询之后,我开始使用while 循环遍历 SqLiteDataReader ,我发现这个 while 循环永远不会出现并继续无休止地执行。理想情况下,它应该在读取 2000 条记录后结束。下面是代码片段。

SQLiteDataReader dr = cmd.ExecuteReader();

    while(dr.Read())
    {
        :
        : Fill the data from column into Event class object
        :
    }

请让我知道是否有人遇到过同样的问题。

编辑:-经过调查,我发现这个问题出现在满载的系统上。我模拟了满载系统的环境并试了一下。

4

1 回答 1

0

你总是可以用另一种方式解决它,LIMIT 2000从 SQL 中消除并稍微改变你的读取逻辑,如下所示:

var dr = cmd.ExecuteReader();
var rows = 0;

while(dr.Read())
{
    if(++rows > 2000) break;

    //
    // Fill the data from column into Event class object
    //
}
于 2013-01-03T15:12:53.310 回答