2013-04-22 57 views
1

我在C#程序,像這樣的作品與數據庫:掃描一個新的記錄在數據庫中

while(record found) 
{ 
    SPEAKS RECORD OUT TO SPEAKER 
    DELETES RECORD 
} 

它,直到它運行的記錄工作正常。

我想要的是即使在數據庫中沒有找到記錄後仍然繼續掃描。 當一條記錄出現時,它應該執行邏輯。如何刷新數據庫以便掃描新記錄?

任何想法?

+1

您需要實施某種輪詢解決方案,或者在您的數據庫中編寫一個可執行外部代碼的觸發器,以便您可以處理記錄插入。 – 2013-04-22 16:45:29

+1

「刷新數據庫」是什麼意思? – 2013-04-22 16:53:16

回答

4

您可能需要等一段時間才能檢查新記錄。所以永遠迭代並檢查新記錄。如果有,請照常進行。如果你有沒有記錄,等待(例如2秒),然後再試一次

while(true){ 
    if(record found){ 
     // SPEAKS RECORD OUT TO SPEAKER 
     // DELETES RECORD 
    }else{ 
     System.Threading.Thread.Sleep(2000); // sleep two seconds 
    } 
} 

如果不請求之間的等待時間,那麼你會遇到的問題進行了新的紀錄不斷詢問。

另一個問題是「迭代永遠」部分。通常情況下,你做什麼,是不是永遠重複,但限制了連續嘗試的次數您對閱讀的新紀錄:

int attempts = 0; 
while(attempts < 3){ 
    attempt++; 
    if(record found){ 
     // SPEAKS RECORD OUT TO SPEAKER 
     // DELETES RECORD 
     attempts=0; // reset attempts counter 
    }else{ 
     System.Threading.Thread.Sleep(2000); // sleep two seconds 
    } 
} 

所以,你的程序將不會永遠努力。

+0

實際上我使用的是服務,所以我希望它永遠運行。 – Apollo 2013-04-22 17:00:05

+0

@Apollo那麼你可以用'while(true)'去。另一種選擇是讓您的服務等待有新的記錄可用的信號。 – 2013-04-22 17:05:40

2

從你的僞代碼看起來你運行了一個做了SELECT的ADO命令。您將按照命令運行時的這些結果進行迭代。它不是一個易變的數據結構。

因此,您需要再次運行SELECT命令,以查看自上次運行SELECT以來是否出現了任何新記錄。