我有一个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