一千萬個為什麽

搜索

將textbox.text值與SQL Server中的值進行比較

好吧所以我試圖比較一個登錄文本框密碼和用戶名與自定義驗證器使用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;
    }

}

我不知道我哪裏出錯了我知道它最有可能是某種愚蠢的錯誤而且我對此缺乏經驗......

最佳答案

UsernameCheck和PasswordCheck將是集合,而不是單個值。因此,ToString()方法不會返回您認為應該的內容。

It's probably returning "IEnumerable"

您需要強制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 關鍵字有點危險,如果你不是肯定肯定你正在編寫的語句的返回類型。如果要將 var 更改為 string ,編譯器會在編譯時捕獲類型不匹配。

轉載註明原文: 將textbox.text值與SQL Server中的值進行比較