我被要求为我编写的某些需要发送提醒电子邮件的软件添加功能。
提醒可能会再次发生;例如,它可能每3天或每2周重复一次。提醒也有开始和结束日期。我创建了一个包含以下字段的SQL表:
event_id
event_name
event_Description
event_startDate
event_endDate
RecurrenceType (e.g. Daily, Weekly, Monthly,Yearly)
Intarval
event_ActiveFlag
我现在需要编写一个每次运行并发送提醒的存储过程。我通过C#控制台应用程序发送没有问题;我遇到的麻烦是我无法弄清楚如何在当天重现。
答案 0 :(得分:2)
无论如何,您无法绕过需要执行计算来确定给定事件的重复日期列表。 “计算”我指的是类似下面的伪代码:
foreach(event in activeEvents)
{
while(recurrenceDate <= currentDate && recurrenceDate <= event.EndDate)
{
event.RecurrenceDates.Add(recurrenceDate);
recurrenceDate.AddDays(event.IntervalLengthInDays);
}
}
我强烈建议您使用Douglas Day's excellent .NET iCal library(请务必阅读许可条款以确保您可以在您的应用中使用此 ,尽管它们非常宽松)来计算重复日期你,因为尽管看起来很简单,但实际上很难正确处理所有角落案件。
这将为您提供事件发生的日期列表,直至当前日期。有两个问题:您何时何地应该执行此计算?
至于哪里,我推荐在C#应用程序中,因为你已经声明你有这样一个组件。绝对有可能在SQL数据库中以高性能,基于集合的方式执行此操作;然而,显而易见,直观的编码方式是使用循环。 C#非常适合循环; SQL不是。当你(或其他人)在六个月后查看它时,以明显的方式执行此操作将使调试和维护变得更加容易。
关于何时,有两种可能性:
选项1:按需:将其作为发送每日提醒爆炸的工作的一部分。
选项2:一次:在创建事件并在系统中输入时执行此操作。
哪个选项更好?我的钱在#1上。为什么呢?