从LINQ返回一个字符串

时间:2011-03-09 12:49:41

标签: string linq-to-sql login

对于学校项目,我们必须创建一个需要登录的评估网站。 对于数据库连接,我选择了LINQ,因为它是新的,应该更容易/更好地使用。

我设法使用以下内容创建登录检查:

public static Boolean Controle(int id, string wachtwoord)
{
    DataClassesDataContext context = new DataClassesDataContext();

    var loginGebruiker =
        from p in dc.Gebruikers
        where p.GebruikerID == id
        where p.GebruikerWachtwoord == wachtwoord
        select p;


    return true;
}

现在我正在尝试创建一个“忘记密码”选项,您输入您的ID并返回密码(稍后会通过电子邮件发送给您,不知道我会怎么做,建议?)

我尝试使用以下代码:

public static string Forgot(int id)
{
    var context = new DataClassesDataContext();

    var wachtwoordLogin = (
        from p in dc.Gebruikers
        where p.GebruikerID == id
        select p.GebruikerWachtwoord);

    return wachtwoordLogin.ToString();
}

页面上按钮后面的代码:

 lbl1.Text = Class1.Forgot(Convert.ToInt32(txt1.Text));

现在,当我输入第一个用户(1)的id时,lbl1变为:

  

SELECT [t0]。[GebruikerWachtwoord] FROM   [dbo]。[Gebruiker] AS [t0] WHERE   [t0]。[GebruikerID] = @ p0

我不知道如何解决这个问题,我一直在寻找,我希望有人可以帮助我。

谢谢, 托马斯

3 个答案:

答案 0 :(得分:2)

LINQ使用延迟执行,所以'wachtwoordLogin'实际上就是“如何获取数据”。直到您应用LINQ实际上将尝试检索数据的运算符。

您的第一个声明:

var loginGebruiker = (
    from p in dc.Gebruikers
    where p.GebruikerID == id 
    where p.GebruikerWachtwoord == wachtwoord
    select p).FirstOrDefault()

if (loginGeruiker != null) {
   //Valid login
} else {
   // invalid
}

FirstOrDefault表示获取列表中的第一项,或者不返回任何项。

在你的其他情况下,你需要同样的事情:

 user =  wachtwoordLogin.FirstOrDefault();

进一步阅读:MSDN 101 LINQ Samples


关于通过电子邮件发送忘记密码的问题,您是否考虑过实施黄金问题算法?它简化了,也做了同样的事情。

基本上,在注册时只是让他们回答一些问题,如果他们可以验证它们,允许他们重置密码。

答案 1 :(得分:1)

  

输入您的ID并返回密码

如果知道用户名的人可以看到密码,那么拥有密码的重点是什么?我知道这不是你所要求的,但对于开始编程的人来说,我觉得有责任指出这一点。你在这里创建的本质上是一个完全破碎的登录模型。没有人应该使用这样的系统。

您永远不应该永远显示密码。不在屏幕上,不在电子邮件中,永远不会。

密码,如果它们甚至需要存储(CodingHorror最近有一些好帖子,提倡像OpenID这样的东西),应该以散列形式存储,基本上无法检索。当用户登录时,类似地散列他们提供的密码(在到达应用程序代码之后,在将其传输到系统中的任何其他位置之前)并将其与存储的散列版本进行比较。

如果用户要求输入密码,则表示您没有密码。你不能把它交给他。这是为了他的保护。如果忘记密码,而不是向用户提供密码,那么您可以向用户提供重置密码的方法(使用临时可用URL发送电子邮件到存档地址,一组“安全问题”以验证其身份等等)这样他就可以输入一个新的覆盖旧的。但是你不应该向用户“显示”他的密码,因为即使你作为系统的管理员也不应该以任何可用的形式看到它。

答案 2 :(得分:0)

wachwoordLogin将是一个IQueryable,所以你可以使用FirstOrDefault()得到这个,如果没有找到它将返回null:

(from p in dc.Gebruikers
 where p.GebruikerID == id
 select p.GebruikerWachtwoord).FirstOrDefault();