ASP.NET会员资格档案

5
我希望向所有今天过生日的用户发送一封电子邮件。
我正在使用内置的asp.net(3.5)成员身份验证。所有用户都有一个配置文件(存储在aspnet_Profile中),其中包含名为“birthday”的日期/时间属性。我需要从“aspnet_Membership”表中获取用户电子邮件地址列表,其中用户的生日是今天,并且还需要在aspnet_Profile表中返回用户的“firstname”,这是一个字符串属性。
最好使用C# LINQ返回列表。
我不确定如何访问配置文件表中的生日属性,因为它是按名称/值列的方式存储在数据库表中。
3个回答

3
我认为你应该考虑改用更先进的基于表格的提供商:

这允许您按照标准 SQL 的方式将数据分隔成每个表列一个值。 这比标准提供商表现更好,并解决了查询文件中“Profiles”数据库的问题。

转换数据库需要少量工作,但在代码方面,只需要配置不同的提供商,其他都不应更改。 这就是提供商模式的优美之处。

http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx

谢谢 @Daniel,我甚至不知道有这个提供者,今后一定会使用它! - kb.

0

我不太常用LINQ,无法给你一个好的答案,但以下可能是你需要的基本SQL(这是我的SSMS在查询设计器中生成的):

SELECT     aspnet_Profile.PropertyValuesString AS firstname, aspnet_Membership.Email
FROM         aspnet_Profile INNER JOIN
                      aspnet_Membership ON aspnet_Profile.UserId = aspnet_Membership.UserId INNER JOIN
                      aspnet_Profile AS aspnet_Profile_1 ON aspnet_Profile.UserId = aspnet_Profile_1.UserId
WHERE     (aspnet_Profile_1.PropertyNames LIKE N'birthday') AND (aspnet_Profile.PropertyNames LIKE N'firstname') AND (DATEADD(dd, 0, DATEDIFF(dd, 0, 
                      aspnet_Profile_1.PropertyValuesString)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())))

0
个人资料机制通过分割名称/值对来解析值,然后逐个解析它们。您可以编写代码自行执行此操作。或者,您可以遵循@Daniel的方法并使用替代提供程序,这会使生活更轻松。开箱即用的提供程序与字符串连接一起很麻烦。
这段代码是否在同一个应用程序中?如果您在谈论C#,则可以使用个人资料对象检索它...这段代码在什么上下文中?批处理服务吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接