当团购关闭时间到了的时候,如何让系统自动将数据库中团购表的IsEnd字段设置为true,而不用人工去设置?(asp.net+Sql server)
你都已经说了(“时间到了”)。那么就判断时间啊,时间到了你就执行一个SQL语句把数据库中的IsEnd=True。
你没明白我的意思,是让系统自动执行关闭团购。也就是到了团购关闭的那个时间点,系统就会自动执行一段sql语句,把IsEnd设置为true,就好像Windows里面的计划任务一样。我找了下网上的资料,sql server有一个“作业”功能,可以实现定时任务,但我总觉得这样做不是很好,所以求救下有没有其它好的办法。
圖購 應該設置一個開始時間,一個結束時間,還有一個是否結束的標誌。但有用戶登錄時候,先判斷是否結束。如果沒有結束,那麼判斷是否在時間段內,如果是,就顯示。如果不是,那麼會設置結束標誌,並且不顯示。
用户访问团购的时候,后台是肯定要做一次判断的。但是我想,关闭团购不是在这个时候执行,而是时间一到准时关闭,不依赖是否有用户访问。
@Ivenchw: 这个只要执行一次赋值就可以了。这个比较计时。
你可以在后台创建一个任务队列,把所有的团购信息:团购编号,开始时间,结束时间放入队列,定时检查判断更新就可以了。这个任务队列可以独立于你的站点,如控制台或或者独立模块!当前页可以直接迭代你的团购信息表,定时判断更新!
嗯,这应该是一种解决办法。但是这个独立程序要不断的去检查检查任务队列,何时检查,检查周期多长呢?太频繁影响性能,太长不能及时更新团购状态。
@Ivenchw: 定时判断,不会同步的。
@無限遐想:
嗯,确实如此,定时更新难以控制到同步,就算每秒刷新数据量大的话也不一定准。但是我们如何能做到让 其到期后 触发某个条件 然后执行更新? 这样的话只能计划任务了,用第三方的任务框架实现,比如 Quartz.Net。具体我没用过,不知道对你有没有帮助,你查查看!
这种方法似乎不大恰当。
IsEnd字段通过数据库更新,如果采用类似于作业方式,存在弊端。原理是该实现是基于轮询的。例如多少秒执行一次。
不如IsEnd改用结束时间。在查询时,则可以用结束时间与当前时间比较。
放到前端来作把,类似秒杀的功能,页面一加载就输出剩余时间(服务器端)供js倒计时用,不管刷新不刷新页面时间是越来越少的,到时间为0时发送一次ajax请求去更新数据库IsEnd字段,更新成功之后再页面上给出友好的提示
使用Sql server agent。