有一个线程,是一个死循环,做的是判断数据库的每一条数据的状态
如果states是1的话 就 改成2
如果请求超时的话 就将线程挂起10秒继续做判断
这个要怎么写
while(true)
{
sqlcommand cmd;
cmd.CommandText = "update t set states =2 where states = 1";
cmd.Timeout = 10 * 1000;
try{cmd.execute;} catch(timeoutexception e){}
}
我是想先将数据库内的数据的状态改成1:(正在处理这条数据)---------这里设置一个超时时间?
一个web请求方法(处理数据) 返回处理结果的字符串(成功or失败)------这条数据会不会请求超时?
如果处理数据成功,数据库的这条数据状态改为2,
我这情况要怎么办呢
@我想我是新手:
sqltransaction sqltrans = sqlConn.BeginTransaction();
try
{
sqlcommand cmd;
cmd.execute('update t set states = 1 where state != 1');
// 调用 web 方法处理数据。
// 处理成功
cmd.execute('update t set states = 2 where state = 1')
sqltrans.commit()
}
catch(timeoutexceptin e){sqltrans.rollback();}
@Launcher: 嗯 这个可以有 谢谢哈...
@Launcher: 这位老师...是不是在try语句里无论对数据进行怎样的更新,只要出错 都会回到这条数据的最原始的状态啊
@我想我是新手: 是的,除非你调用的 web 方法修改了同一条记录,这里就回滚不了。你需要使用分布式事务来在多个机器上共享事务。
@Launcher: 嗯 谢谢...
@.F.: 这段代码是个死循环啊
try
catch(timeoutexception ee)
{
thread.sleep(10*1000);
}
那我要在哪里设置一个超时的时间呢?
是在进行判断查询出states是1之前进行设置
还是在将states从1改成2的时候来进行设置?
我在超时之后还要对这一条数据进行操作...该怎么办?