对于应用程序,我需要每小时向最终用户发送个性化的邀请电子邮件。这些用户是电子邮件地址,其余信息都在数据库中。
Planned.IsPlannable
设置为True
和
有一个Planned.DateStart
和一个
Planned.DateEnd
之间某个
期间可用于接收
电子邮件。 至少有两种情况可供选择:通过
检索相应的数据1 :)查看类似的内容:
SELECT [Computer].ComputerName,
[User].UserEmail,
[Planned].DateAvailable,
[Planned].DatePlanned
FROM [Computer]
INNER JOIN
[Planned] ON [Computer.ComputerID] = [Planned.ComputerID]
INNER JOIN
[User] ON [Computer].UserID = [User].UserID
WHERE (DATEDIFF(dd, GETDATE(), [Planned.DateAvailable]) < 10)
AND Planned.IsPlannable = 1
和撰写,根据此视图的结果,在此应用程序的C#代码中显示相应的消息
。
2 :) 在视图中撰写sql-server上的整个消息并返回类似
的内容[EmailTo]
[Subject]
[Body]
然后只迭代结果并从中创建MailMessage
个对象
在这两种情况下我都收到如下消息:
foreach (vwGetInvitableComputer u in UserController.GetAllInvitableUsers())
{
// where the usercontroller wraps the Subsonic logic.
// the composition happens here
}
在C#代码中迭代,然后从预先格式化的数据中编写mailmessage。
选择性能和资源的场景是什么?
更新:在选项2中的数据库中确实存在文本操作。但是,这会将messagbody中的三个字符串替换为CompterName,DateStart和DateEnd。也许,SQL视图足够聪明为此传播性能,而c#代码“在请求时”执行此操作?
答案 0 :(得分:3)
首先考虑:您是否可以设想更改电子邮件格式的时间?如果不是那么它可能无关紧要。
第二个考虑因素:你能想象一下电子邮件需要比SQL更容易提供的更多操作吗?如果是这样,那么你一定要选择C#。
第三个考虑因素:重新部署对环境有多大问题?
最后一个替代选项:使用C#进行邮件撰写,但使用可以轻松更新的基于数据库或文件的模板。
答案 1 :(得分:0)
我会选择选项2,使用视图或存储过程编写在服务器上传递电子邮件所需的所有信息。理想情况下,数据库调用应尽可能减少到服务器的往返次数。