Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在asp.net mvc4中,每天00:00更新数据库的最佳方式是什么_Asp.net_Schedule - Fatal编程技术网

在asp.net mvc4中,每天00:00更新数据库的最佳方式是什么

在asp.net mvc4中,每天00:00更新数据库的最佳方式是什么,asp.net,schedule,Asp.net,Schedule,在ASP.NET MVC4项目中,我希望每天00:00更新sql server(2012)中的一些数据。 也许我有三个选择: 1.编写在服务器上运行的windows服务并执行数据库更新。 2.编写每天00:00执行的sql server存储过程。 3.使用第三方工具,如Quartz.Net、fluent 哪一个是最好的选择?为什么?请查看Hangfire。ASP.NET中的计划任务。超级简单可靠 我们刚刚开始使用它,我喜欢它。我使用了你写的三种方式,它们都有各自的优点和缺点。但我建议您使用Qu

在ASP.NET MVC4项目中,我希望每天00:00更新sql server(2012)中的一些数据。 也许我有三个选择: 1.编写在服务器上运行的windows服务并执行数据库更新。 2.编写每天00:00执行的sql server存储过程。 3.使用第三方工具,如Quartz.Net、fluent


哪一个是最好的选择?为什么?

请查看Hangfire。ASP.NET中的计划任务。超级简单可靠


我们刚刚开始使用它,我喜欢它。

我使用了你写的三种方式,它们都有各自的优点和缺点。但我建议您使用Quartz.Net。它很容易实现,也很容易使用。

您可以在ASP.NET中看到mike关于计划任务的精彩文章

如果您对T-SQL感到满意,并且任务可以完全位于数据库中,那么将其实现为存储过程并使用SQL Server代理进行计划是有意义的。这减少了外部依赖项的数量,因为SQL Server内部的一切都发生了,故障点也更少(例如,如果IIS或您的web解决方案关闭,它仍将运行)

如果您的更新需要与其他资源交互,例如从已知位置导入文本文件等,那么您也可以考虑在SSIS(SQLServer集成服务)中实现它。这样做的优点是仍然以SQL为宿主,同时允许您访问存储过程不容易实现的其他功能

如果我觉得在proc或SSIS包中实现所需的功能很困难或不方便,我只会在.NET中实现为批处理过程。这一点尤其重要,因为SQL Server 2012允许您使用.NET类型代码构建SSIS包,但它“存在”在SQL Server上注册的SSIS包中

我不会在您的ASP.NET解决方案中实现它,除非出于某种原因它实际上需要基于web的用户界面。您希望在每晚的同一时间执行此过程的事实告诉我,这不需要人工交互

在流程可以完全自动化的情况下,在等待某种UI输入时,避免放置用户界面或任何可能挂起或成为单点故障的东西。请记住,演示层是用于人机交互的,如果需要的话,请考虑一下。最好将其作为某种批处理来实现,这也使得它更容易通过自动化执行。此规则也有例外,例如,如果您希望将更新实现为带有REST接口等的web API,但作为一般规则,它是正确的


作为一个侧重点,如果你的目标是在一夜之间运行你的进程,考虑在凌晨(3到早上4点)而不是午夜安排它,因为这通常是当大多数人睡着时,你的更新最不可能影响你的应用程序和它的数据库的可用性,或者如果你的更新很长时间运行,遇到诸如夏令时变更之类的边缘情况,或与其他夜间流程发生冲突。

您是否具有服务器的shell(RDP或Telnet)访问权限?如果是这样,请使用计划任务(使用RDP)或Telnet中的
at
命令。或者,如果您严格地只对数据库运行SQL,请改用SQL Server代理。此方法的成功率如何?恐怕这个方法比存储过程不够稳定。你对这个问题有什么看法?我用了好几次这个方法,没有遇到任何问题,存储过程也很好,但我会选择quartz。netI很抱歉问一下hangfire和quartz之间有什么区别。netI没有使用quartz.Net,所以我无法明智地评论。我可以说,hangfire是专门为ASP.NET构建的,可以处理应用程序池回收和在IIS中运行的其他细微差别。非常感谢。这对我帮助很大。非常感谢。您的回答对我很有帮助。您好,现在我选择SQL存储过程的解析。我还使用windows azure云服务。我如何使用azure中的“SQL Server Agent”计划程序来运行我的任务。期待你的回答!谢谢。我还没有使用Azure服务,所以其他人可能会更好地为您提供建议。