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

C# C从数据表中检索用户名和密码,c#,linq-to-sql,C#,Linq To Sql,我是C的新手。我正在使用VS2010和LINQ。 这是我的问题。。 我有一个登录页面,有两个文本框和确认按钮。按下按钮时,应用程序应检查表uporabniki中的用户名和密码,如果正确,则重定向 如何将所有用户名和密码存储到列表中,然后在列表中循环并检查是否匹配 protected void Button1_Click(object sender, EventArgs e) { WebApplication7.linqDataContext db = new WebApplicatio

我是C的新手。我正在使用VS2010和LINQ。 这是我的问题。。 我有一个登录页面,有两个文本框和确认按钮。按下按钮时,应用程序应检查表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;
}
谢谢,, Beni

用户变量实现了一个名为IEnumerable的接口,其中T在您的情况下等于string

要从IEnumerable获取列表,最简单的方法是使用LINQ扩展方法ToList,因此:


您只需将检查添加到查询中,类似这样的操作即可:

   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的评论,您应该存储散列而不是纯文本密码

不要在数据库中存储密码,这很危险。存储一个散列。 首先不要获取列表,因为您已经有了一个数据库,它知道如何查找单个行。 你想要的东西更像:

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
        }

    }

您确实需要使用散列存储任何密码。例如MD5,并对照它进行检查

using System.Security.Cryptography;

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

与其存储密码,为什么不存储密码的散列,然后检查散列?请不要以明文存储密码。我真的厌倦了那些对如何存储这类信息毫无头绪的人经营的网站。如果您能够检索到密码并将其显示给用户,那么您是做错了,应该不可能检索到用户的密码。您好,请快速回复thanx。我制作这个页面是为了让自己了解C.Thanx的一些简单内容,以便解决它的问题,但我想知道如何将它们存储到列表中:嘿,我从来没有注意到您可以在linq语句中像这样“选择true”。我不确定我是否喜欢它,因为我第一次读错了,但它可能会派上用场!检查md5并添加新用户..在表中存储了md5哈希。您对md5做了什么?理想情况下,它应该是用户名+密码+随机设置,或者用户名+密码+系统特有的设置。只要散列密码,攻击就可以将密码更改为密码等,并查找具有相同密码的人。
using System.Security.Cryptography;

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