C# compact Framework 3.5上的System.Data.SQLite问题
我在compact framework应用程序中使用sqlite来记录系统中的事件。我也在用。事件有时间戳来描述它发生的时间。我将此时间戳存储为表中的滴答声。除此列外,该表还包含另外5列整数/文本类型的列。下表是模式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
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终端上尝试了该查询;成功了。是的,你是对的。但这是我感兴趣的根本原因。