我有一個windows服務,以給定的時間間隔輪詢Oracle數據庫,並根據某些標準更新幾個字段。要做到這一點,它會打開一個光標並遍歷行來更新。Windows服務數據庫更新
protected override void OnStart(string[] args)
{
TimerCallback timerDelegate = new TimerCallback(DoStuff);
serviceTimer = new Timer(timerDelegate, null, 0, 20000);
}
private void DoStuff(object state)
{
// Set-up connectionsString and sqlQuery
using (OracleConnection oraConnect = new OracleConnection(connectionString))
{
oraConnect.Open();
using (OracleCommand oraCommand = new OracleCommand(sqlQuery, oraConnect))
using (OracleDataReader oraReader = oraCommand.ExecuteReader())
{
while (oraReader.Read())
{
// Do some processing here – may take some time
// Update database here
}
}
}
我的問題是,例如說,計時器間隔是20秒(如上)。如果光標需要30秒才能迭代,會發生什麼情況?我意識到每個計時器都可以在單獨的線程中工作,但是如果每次都建立一個新的數據庫連接,第二次調用是否會查看第一次調用所做的更改?
我想是這樣,但我的問題更多:「會發生什麼?」而不是「我怎樣才能解決它?」 – 2010-11-01 09:38:54
對不起,我想念明白:) – 2010-11-01 09:39:31