C#从数据表中检索用户名和密码

时间:2011-12-14 12:43:15

标签: c# linq-to-sql

我是C#的新手。我正在使用VS2010和LINQ。 继承人我的问题.. 我有一个登录页面,有2个文本框和确认按钮。按下按钮时,应用程序应检查表uporabniki中的用户名和密码,如果正确,则重定向..

如何将所有用户名和密码存储到List中,然后遍历列表并检查匹配?

protected void Button1_Click(object sender, EventArgs e) 
{
    WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();

    var users = from usr in db.uporabnikis select usr.username;

    List<String> upo = new List<String>();
    upo = (List<String>) users;
}

谢谢你, 贝尼

5 个答案:

答案 0 :(得分:3)

您应该将检查添加到查询中,类似这样的事情:

   WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();

   bool validLogin = (from usr in db.uporabnikis
                where usr.username == txtUserName.Text and 
                      usr.password == txtPassword.Text
                select true).SingleOrDefault();

   if(validLogin)
       // Do stuff

我同意上面的nonnb评论,但你应该存储一个哈希而不是明文密码。

答案 1 :(得分:1)

  1. 不要将密码存储在数据库中,这很危险。存储哈希值。
  2. 首先不要获取列表,你已经有了一个数据库,它知道如何查找单个行。
  3. 你想要更像的东西:

    var userInfo = (from usr in db.uporabnikis where usr.username == Request.Form["username"] select {usr.username, usr.passwordHash, usr.salt).FirstOrDefault();
    
    bool loggedIn = passwordHash == HashPassword(usr.username, usr.salt, Request.Form["password"]);
    

    等等...

答案 2 :(得分:1)

试试这个

    protected void Button1_Click(object sender, EventArgs e)
    {
        WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();

        var users = from usr in db.uporabnikis
                    select usr.username,usr.password;

        bool result = false;

        foreach(var user in users)
        {
            if(user.username.Equals("usernametocheck") && user.password.Equals("passwordtocheck"))
            {
                result = true;
                break;
            }
        }

        if(result)
        {
            //code to redirect
        }
        else
        {
            //Display error
        }

    }

或者你可以试试这个

    protected void Button1_Click(object sender, EventArgs e)
    {
        WebApplication7.linqDataContext db = new WebApplication7.linqDataContext();

        int recordCount = 0;
        recordCount  = db.uporabnikis.where(x => x.username == "usernametocheck" && x.password = "passwordtocheck").Count();



        if (recordCount > 0)
        {
            //code to redirect
        }
        else
        {
            //Display error
        }

    }

答案 3 :(得分:0)

users变量实现了一个名为IEnumerable<T>的接口,其中T等于string

要从List<string>获取IEnumerable<string>,最简单的路线是使用LINQ扩展方法ToList(),所以:

List<String> upo =users.ToList();

答案 4 :(得分:0)

您确实需要使用Hash存储任何密码。例如MD5,并检查它。

using System.Security.Cryptography;

 using (MD5 hash = MD5.Create())
        {password = GetMd5Hash(hash,passwordString}