如何在特定时间通过C#运行SQL存储过程?

我现在正在为图书馆建立一个网站,如果有人需要在接下来的五天内退回书籍并通过电子邮件向他们发送提醒,我需要每天同时查看。

我的问题是这样做的正确方法是什么?

我需要完成的是当特定时间到来时,我需要运行一个sql存储过程并通过visual studio 2010或任何其他方式检查存储过程是否已返回我需要发送电子邮件的任何结果。

有没有办法可以在C#上不断检查系统时间而不是触发事件?

我想映像最简单的方法是在SQL Server代理中创建一个新作业,每天调用你的存储过程,而不是试图在你编写的应用程序中实现这一点。

有关创建SQL作业的详细信息,请参阅以下链接

编辑 – 对不起 ,我真的不应该在做其他工作的同时回答SOpost。 我完全错过了你想要发送电子邮件的事实,并且想要在屏幕上报告过期记录。 咄。

为了在每天的某个时间发送过期的电子邮件,我猜一个Windows服务肯定会完成这项工作,但似乎有点过头了,你需要完全控制它正在运行的服务器。

你可以设置一个计划任务来每天调用sendOverdueMail.aspx网页来做这项工作吗? 像这样

显然还有SQL Server代理电子邮件选项,虽然我不确定你对将产生的电子邮件格式有多少控制权。

最后, 本教程通过挂钩到ASP.net服务器上的缓存到期事件来逐步创建计划任务类型效果,然后允许您调用您的电子邮件代码。

private const string DummyCacheItemKey = "GagaGuguGigi"; protected void Application_Start(Object sender, EventArgs e) { RegisterCacheEntry(); } private bool RegisterCacheEntry() { if( null != HttpContext.Current.Cache[ DummyCacheItemKey ] ) return false; HttpContext.Current.Cache.Add( DummyCacheItemKey, "Test", null, DateTime.MaxValue, TimeSpan.FromMinutes(1), CacheItemPriority.Normal, new CacheItemRemovedCallback( CacheItemRemovedCallback ) ); return true; } public void CacheItemRemovedCallback( string key, object value, CacheItemRemovedReason reason) { Debug.WriteLine("Cache item callback: " + DateTime.Now.ToString() ); // send reminder emails here DoWork(); } 

要比较日期,请在T-SQL中使用DATEDIFF函数。 例如,您有一个包含行ID,书名,学生姓名,借用日期和截止日期的表格。 借用日期和截止日期都具有DateTime类型。

查询x天数的书籍; 根据您的规格,这是5天,查询这样

SELECT RowID,BookName,StudentName,DateBorrowed,DueDate FROM dbo.Borrowers WHERE DATEDIFF(day,DateBorrowed,DueDate)> = 5

这将查询所有应提醒的书籍。

然后使用SQL查询作业触发将附加到另一个表的操作,该表将包含需要提醒的学生的电子邮件列表。 可以从将使用该列表作为电子邮件队列的Windows服务读取此表。 或者,您可以配置SQL以直接发送电子邮件。

使用Windows计划任务来调用执行运行存储过程和发送邮件任务的网站页面。

C#中没有特定的方法,但会给你这样的结果。

如果您无法访问计划任务,或者无法运行Windows服务,即您拥有共享主机,则还有另一种选择。

有可用于监控我们网站正常运行时间的服务。 他们定期提出要求。 您可以使用此请求执行任务。 这里给出了一些链接

网站正常运行时间

Pingdom的

我已经多次使用它们,它们非常可靠。 最重要的是,它们不要求您在系统上具有管理员访问权限以执行计划任务。