有人请通过修改此代码来帮助我。当我通过存储过程调用检索Login值时,虽然我给出了正确的用户名和密码我收到错误消息“无效的用户名或密码”意味着始终检查错误的条件only.pls帮助我某人......这是我的代码。
Login.cs:
public int GetLogin(string UserName, string Password)
{
SqlConnection con = new SqlConnection(str);
SqlDataAdapter da = new SqlDataAdapter("GetUserLogin", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = UserName;
da.SelectCommand.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = Password;
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
if ((ds.Tables[0].Rows[0].ItemArray[1].ToString() == UserName) && (ds.Tables[0].Rows[0].ItemArray[2].ToString() == Password))
{
return 1;
}
else
{
return 0;
}
}
else
{
return -1;
}
}
存储过程:
CREATE PROCEDURE GetUserLogin( @UserName varchar(50),@Password varchar(50))
AS
select UserName, Password
From Login where UserName=@UserName and Password=@Password
RETURN
Login.aspx.cs:
protected void BtnLogin_Click(object sender, EventArgs e)
{
Session["UserName"] = TxtUserName.Text;
Login lg = new Login();
if ((lg.GetLogin(TxtUserName.Text, TxtPassword.Text) == 1)&&(DropDownList1.SelectedIndex == 1))
{
Response.Redirect("c1.aspx");
}
else if ((lg.GetAdminLogin(TxtUserName.Text, TxtPassword.Text) == 1) && (DropDownList1.SelectedValue == 0))
{
Response.Redirect("Admin.aspx");
}
else
{
Lbl1.Text = "<b>Sorry,Invalid UserName or Password</b>";
}
}
虽然我给出了正确的输入,但突出显示的条件总是会转到其他条件。
答案 0 :(得分:2)
首先,这看起来可能是一个区分大小写的问题;即使TSQL不区分大小写,C#也是如此。但是为什么要返回密码(事实上,你甚至不能存储密码 - 只有一个哈希)。
就个人而言,我只是:
CREATE PROCEDURE GetUserLogin( @UserName varchar(50),@Password varchar(50))
AS
select UserName
From Login where UserName=@UserName
and Password=@Password -- yeuch (should compare **hash**)
然后检查行的存在;如果ds.Tables[0].Rows.Count > 0
,则验证它们。当然,DataTable
在这里也有些过分,但它应该有效。
答案 1 :(得分:0)
Session["UserName"] = TxtUserName.Text;
Login lg = new Login();
if ((lg.GetLogin(TxtUserName.Text, **TxtPassword.Text**)
您在哪里声明或分配了TxtPassword.Text?当您将其传递给GetLogin函数时,没有为TxtPassword.Text设置值。也许这就是为什么它总是会转到最后一个其他块,因为它失败了两次(没有TxtPassword.Text的值)。
Session["UserName"] = TxtUserName.Text;
Session["Password"] = TxtPassword.Text;
Login lg = new Login();
if ((lg.GetLogin(TxtUserName.Text, **TxtPassword.Text**)
我猜您的代码应该添加该行。
Session["Password"] = TxtPassword.Text;
验证;)
答案 2 :(得分:0)
你一定要检查ItemArray [0]和ItemArray [1]而不是ItemArray [1]和ItemArray [2]。
答案 3 :(得分:0)
或者这只是SelectedValue 1 vs“1”,0 vs“0”???