繁体   English   中英

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

[英]C# retrieving username and password from data table

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

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

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;
}

谢谢贝尼

您应该只将检查添加到查询中,就像这样:

   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. 不要将密码存储在数据库中,这很危险。 存储哈希。
  2. 没有获得在首位的列表,你已经有了一个数据库,它知道如何找到个别行。

您想要更多类似的东西:

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"]);

等等...

尝试这个

    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
        }

    }

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

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

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

您确实需要使用哈希存储任何密码。 例如MD5,并进行检查。

using System.Security.Cryptography;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM