2


0

textbox.textの値とSQL Serverの値を比較する

OK これは大歓迎です…​ 上級者に感謝します…​

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

}

私はどこに間違っているのか分かりませんが、おそらくおそらくばかげた間違いのいくつかを知っており、私はこれに不慣れです…​

1 Answer


2


UsernameCheckとPasswordCheckは、単一の値ではなくコレクションになります。 したがって、ToString()メソッドは、あなたが思っているものを返していません。

おそらく `" 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`sを string`sに変更すると、コンパイラーはコンパイル時に型の不一致を検出します。