C# compact Framework 3.5上的System.Data.SQLite问题

C# compact Framework 3.5上的System.Data.SQLite问题,c#,sqlite,embedded,windows-ce,system.data.sqlite,C#,Sqlite,Embedded,Windows Ce,System.data.sqlite,我在compact framework应用程序中使用sqlite来记录系统中的事件。我也在用。事件有时间戳来描述它发生的时间。我将此时间戳存储为表中的滴答声。除此列外,该表还包含另外5列整数/文本类型的列。下表是模式 CREATE TABLE T1 (TimeStamp INTEGER, Col2 INTEGER, Col3 INTEGER, Col4 INTEGER, Col5 INTEGER, Col6 TEXT, PRIMARY KEY(Time

我在compact framework应用程序中使用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;
我正在将用户给出的时间戳转换为滴答声,并将其作为“@startDate”和“@endDate”的参数值发送

在执行上述查询之后,我开始使用while循环迭代SqLiteDataReader,在那里我发现这个while循环从来没有出现过,并且继续无休止地执行。理想情况下,它应该结束 在读了2000条记录之后。 下面是代码片段

SQLiteDataReader dr = cmd.ExecuteReader();

    while(dr.Read())
    {
        :
        : Fill the data from column into Event class object
        :
    }
如果有人遇到过同样的问题,请告诉我

编辑:-经过调查,我发现这个问题出现在满载的系统上。我模拟
完全加载系统的环境,并在其上进行了尝试。

您始终可以用另一种方法解决它,从SQL中删除
LIMIT 2000
,并稍微更改您的读取逻辑,如下所示:

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

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

    //
    // Fill the data from column into Event class object
    //
}

您能否创建一个完整的示例程序来生成数据并从中查询?这会有帮助。您是否也在sqlite终端上尝试了相同的查询?是的,我在sqlite终端上尝试了该查询;成功了。是的,你是对的。但这是我感兴趣的根本原因。