C#中实现一个预定功能,
在预定数据表中有一个Keeptime属性表示预定截止时间
现在想实现一个自动取消预定的功能, 就是当时间超过预定截止时间时系统自动将房间改为空闲
在预定数据表中有一个Keeptime属性表示预定截止时间
现在想实现一个自动取消预定的功能, 就是当时间超过预定截止时间时系统自动将房间改为空闲
解决方案 »
- Udp一对多传输文件
- 请各位高手帮帮忙!!!winform下用treeview绑定xml动态生成特定的树
- 如何监测对 Web Services 服务端的调用?
- C#中如何把byte[]类型的UCS2编码内容转换为字符串string
- 请问一个关于DataSet效率的问题。。。
- 为什么调试不了
- 单文件复制的进度问题
- 急 求助~~~sqlite for .net framework 无法加载System.Data.Sqlite.dll或他的依赖项
- 一不小心。。。。。。
- 创建的Windows service中是否可以MSMQ来接收windows 消息(好答案 一定给分)
- 日期 星期 相對應的一個表怎麼做?各位頂一下。有力的頂一頂
- 比较简单的一个问题
select t.description,
t.idle |
(((datediff(second, getdate(), t.keeptime) / abs(datediff(second, getdate(), t.keeptime))+1)/2)^1)
as RoomCanReserve
from mytesttable t
如果idle为1,则房间可订,否则检查日期keeptime,如果keeptime小于等于当前时间,则房间可订,否则房间不可订。
上面的语句查出来的RoomCanReserve列的值就是结果,1为可订,0为不可订。
数据库中状态列和时间列经过计算之后就可以得出一个动态的结果。你站在全局的角度想象一下,
现在你有3个量:状态,预定保留时间,当前时间
这3个量的前两个都是不变的(如果不主动修改),最后一个量是时刻变化的。
这3个量经过4楼的sql语句计算后得出来的量,也是随时间变化的,不需要主动去修改它。
这实际上就已经达到了“额外的线程”的目的了!因为“当前时间”就是这个线程。我不知道我说明白了没有。
简单点 自己设置每2秒或5秒
去访问一次数据库!(不知道你的表里面有没有状态这个值 就比如 状态 1是空闲 2是预定 3有人)
如果有状态就去判断!
状态=2 时间《=当前时间! 然后能找出 需要取消预定的! 那直接把这个记录删除或者修改状态
你这个sql是一个比较简单的实现的方式。
但是有两个问题,我觉得。
第一,维护问题。 这样的sql真的不是每一个人都能花一分钟确切知道它的业务含义的。
第二,数据一致性的问题。 如果不去修改数据库,这个房间一直其实是预定状态的(在数据库中),虽然在前台显示的是可以接受预定。
假如已经过了预定时间,正好又要执行一些统计的数据,这个时候运算出来的数据,其实是错误的。 to:LZ
我的建议,在数据库级别做job,每隔几分钟运行下,取消一些房间的预定状态。以上是我的一些想法,欢迎讨论再骂一句,那些说ajax的,你们知道ajax是什么吗?它不是神。
没有了IE窗口,没有了客户端,ajax还怎么运行啊?
你能保证一直有个SB连着你的服务器站点,打开指定的网页,
而且他机器上的js没有被禁用,还能一直忍受着 js的Timer的折磨而一直不关闭浏览器???ajax,客户端的东西,别赋予它太多的职能,承受不起。
如果我在一年或者更久之前,想法和你会非常的一致。觉得你的这个办法真的非常的棒。
但是你做了一些系统,对数据要求比较高的话,而且统计又要求比较高的话,就会知道数据库的东西,业务含义,可能往往比我们前台的一些小的技巧要重要。原谅我说这么多吧。 是因为看到了之前的影子。如有冒犯,就当我自言自语了。呵呵
new System.Timers.Timer(1000).Elapsed +=new ElapsedEventHandler(timer_Elapsed);
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
...
}
KISS = Keep It Simple and Stupid