【问题标题】:Comparing textbox.text value to value in SQL Server将 textbox.text 值与 SQL Server 中的值进行比较
【发布时间】:2011-02-08 10:12:57
【问题描述】:

好的,所以我正在尝试将登录文本框密码和用户名与使用 linq 的自定义验证器进行比较,以从数据库中获取信息,它总是返回 false,尽管在验证器上有人可以告诉我下面的代码哪里出错了。这将不胜感激...谢谢您提前...

protected void LoginValidate(object source, ServerValidateEventArgs args)
{
    TiamoDataContext context = new TiamoDataContext();

    var UsernameCheck = from User in context.Users
                      where User.Username == TextBoxLoginUsername.Text && User.Password == TextBoxLogInPassword.Text
                      select User.Username;

    var PasswordCheck = from User in context.Users
                    where User.Username == TextBoxLoginUsername.Text && User.Password == TextBoxLogInPassword.Text
                    select User.Password;

    String test1 = PasswordCheck.ToString();
    String test2 = UsernameCheck.ToString();

    if (test1 == TextBoxLogInPassword.Text && test2 == TextBoxLoginUsername.Text)
    {
        args.IsValid = true;
        Session["Username"] = TextBoxLoginUsername;
        Response.Redirect("UserProfile.aspx");

    }
    else 
    {
        args.IsValid = false;
    }

}

我不知道我哪里出错了我知道这很可能是某种愚蠢的错误,而我对此缺乏经验......

【问题讨论】:

    标签: c# asp.net sql html


    【解决方案1】:

    UsernameCheck 和 PasswordCheck 将是集合,而不是单个值。因此 ToString() 方法没有返回您认为应该返回的内容。

    它可能正在返回"IEnumerable<string>"

    您需要强制 LINQ 查询返回单个结果而不是集合。

    var user = context.Users.Where(u => u.Username==TextBoxLoginUsername.Text && 
                                        u.Password == TextBoxLogInPassword.Text)
                   .FirstOrDefault();
    
    string userNameCheck = user.Username;
    string passwordCheck = user.Password;
    

    顺便说一句,这就是为什么使用var 关键字有点危险的原因,如果你不是绝对肯定你正在编写的语句的返回类型。如果您将vars 更改为strings,编译器会在编译时发现类型不匹配。

    【讨论】:

    • 谢谢你这就像一个魅力,我有一个错误 nullpointerexception 我刚刚添加了一个 if(user != null){};它奏效了......只是一个附带的问题是这是验证用户的最佳方式 asp.net 世界中的标准是什么
    • 最好的办法是使用 ASP.NET Membership Providers 之一(或编写您自己的自定义)。我会自己提出一个问题......或搜索并确保它不是重复的。作为对新用户的另一个建议,请确保在获得正确答案时接受它们。否则,您的徽章将显示较低的接受率,并且某些人将来不会回答您的问题。
    猜你喜欢
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2013-07-14
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多