想在ASP.NET MVC中每天执行一次查询

dev*_*xer 4 .net c# asp.net-mvc .net-4.0 asp.net-mvc-3

我希望我的ASP.NET MVC应用程序每天执行一次查询.建议的方法是什么?

我的第一个想法是在Global.asax中放置一个每24小时关闭一次的计时器,然后从Elapsed处理程序调用我的查询.这样做有什么陷阱吗?有没有更好的办法?

编辑

让我为我正在尝试做的事情添加一些细节.我特别喜欢每天午夜执行的查询.如果错过了一天(比如由于服务器维护或升级应用程序),这将不是一个主要问题.

编辑2

结合更多细节:

  1. 查询实际上是INSERT,而不是SELECT.目的是为将在月底续订其成员的任何成员添加"续订"记录.
  2. 我正在使用SQL Server Compact(它是一个非常小的数据库).

Sev*_*yev 8

它是否必须来自Web层?谁会在那里使用HTML?通常,在数据库中调度定期SQL查询.对于MS SQL Server - 通过SQL Agent作业工具.SQL Server甚至可以发送电子邮件.

RE:edit2:应该马上告诉你.SQL Server Compact与SQL Server不同 - 例如,它没有SQL Agent IIRC.尽管如此,调用Web层仍然是一种过度杀伤力.我将Windows Scripting Host文件(.js)与Windows任务调度程序结合使用.WSH文件可以通过ADO连接到数据库并做任何他们想做的事 - 插入,选择,任何东西.

要检测错过的计划运行,请引入一个包含计划运行日志的额外表.然后在后续运行中,您可以分析上次运行的日期并采取相应措施.

Edit2:所以没有管理员权限.你应该真正告诉问题中的所有细节.在这种情况下,我毕竟通过Web层,但调度将在我的结束 - 我有控制权.在您的端部运行任务计划程序并在服务器上调用HTTP URL.要调用URL,您可以使用类似免费的CURL实用程序.以预定方式运行IE具有使窗口保持打开的缺点.

IIS不是一个调度引擎.

编辑3:评论:对不起,我误解了你的设置的性质.我自己的经历使我的判断蒙上了阴影:)你可以在每次登录操作时运行一次检查,如果从上次维护操作开始已经有一段时间了,那就立即运行吗?维修需要多长时间?如果它是〜1min +,则在工作线程中运行它是有意义的,这样登录用户就不会等待.

一般来说,安排日常维护是一个好主意,而且它经常被实施,但似乎你根本就没有这种能力.