Stored procedures 登录存储过程编码问题
有人请帮我修改此代码。当我通过存储过程调用检索登录值时,虽然我给出了正确的用户名和密码,但我收到了错误消息“无效的用户名或密码”表示总是只检查错误条件。请有人帮我……这是我的代码 Login.cs:Stored procedures 登录存储过程编码问题,stored-procedures,Stored Procedures,有人请帮我修改此代码。当我通过存储过程调用检索登录值时,虽然我给出了正确的用户名和密码,但我收到了错误消息“无效的用户名或密码”表示总是只检查错误条件。请有人帮我……这是我的代码 Login.cs: public int GetLogin(string UserName, string Password) { SqlConnection con = new SqlConnection(str); SqlDataAdapter da = new
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>";
}
}
protectedvoidbtnlogin\u单击(对象发送方,事件参数e)
{
会话[“用户名”]=TxtUserName.Text;
Login lg=新登录();
if((lg.GetLogin(txtsername.Text,txtspassword.Text)==1)和&(DropDownList1.SelectedIndex==1))
{
响应。重定向(“c1.aspx”);
}
else if((lg.GetAdminLogin(txtserName.Text,TxtPassword.Text)==1)和&(DropDownList1.SelectedValue==0))
{
重定向(“Admin.aspx”);
}
其他的
{
Lbl1.Text=“对不起,用户名或密码无效”;
}
}
尽管我给出了正确的输入,但上面突出显示的条件总是转到其他条件
Session["UserName"] = TxtUserName.Text;
Login lg = new Login();
if ((lg.GetLogin(TxtUserName.Text, **TxtPassword.Text**)
您在哪里声明或分配了TxtPassword.Text?将其传递给GetLogin函数时,没有为TxtPassword.Text设置任何值。也许这就是为什么它总是转到最后一个else块,因为两次都失败了(TxtPassword.Text没有值)
我想你的代码应该添加行
Session["Password"] = TxtPassword.Text;
验证;) 您肯定应该检查ItemArray[0]和ItemArray[1],而不是ItemArray[1]和ItemArray[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对“1”,0对“0”???嗨..现在它的工作是逻辑数组索引错误。应为ItemArray[0]和ItemArray[1]而不是ItemArray[1]和ItemArray[2]
CREATE PROCEDURE GetUserLogin( @UserName varchar(50),@Password varchar(50))
AS
select UserName
From Login where UserName=@UserName
and Password=@Password -- yeuch (should compare **hash**)