2013-01-02 46 views
3

我在我的壓縮框架應用程序中使用sqlite來記錄系統中的事件。我也使用System.Data.SQLite。該事件有時間戳來描述它發生在什麼時間。我將這個時間戳存儲爲我的表格中的Ticks。與該列一起,該表格還包含另外5列整數/文本類型。下面是表模式Compact Framework 3.5上的System.Data.SQLite問題

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

我下面的查詢

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

我把由用戶蜱給出的時間戳和發送它們作爲參數查詢使用ADO兩個時間戳記之間的數據'@startDate'和'@endDate'的值。

當我執行上面的查詢,然後我開始迭代SqLiteDataReader使用while循環那裏我發現這個while循環永遠不會出來,並繼續無休止地執行。理想情況下,在閱讀2000條記錄後應該結束 。 以下是代碼片段。

SQLiteDataReader dr = cmd.ExecuteReader(); 

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

請讓我知道是否有人面臨同樣的問題。

編輯: -調查後,我發現,這個問題出現了滿負荷的系統上。我模擬了 滿載系統的環境並嘗試了它。

+0

您可以創建一個完整的示例程序生成的數據和查詢出來的?這將有所幫助。你是否也在sqlite終端中嘗試過相同的查詢? – devshorts

+0

是的,我試着在sqlite終端查詢;有效。 – Omkar

回答

0

你總是可以解決它以另一種方式,消除了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 
    // 
} 
+0

是的,你是對的。但這是解決方法,我對根本原因感興趣。 – Omkar

相關問題