Stored procedures 登录存储过程编码问题

Stored procedures 登录存储过程编码问题,stored-procedures,Stored Procedures,有人请帮我修改此代码。当我通过存储过程调用检索登录值时,虽然我给出了正确的用户名和密码,但我收到了错误消息“无效的用户名或密码”表示总是只检查错误条件。请有人帮我……这是我的代码 Login.cs: public int GetLogin(string UserName, string Password) { SqlConnection con = new SqlConnection(str); SqlDataAdapter da = new

有人请帮我修改此代码。当我通过存储过程调用检索登录值时,虽然我给出了正确的用户名和密码,但我收到了错误消息“无效的用户名或密码”表示总是只检查错误条件。请有人帮我……这是我的代码

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

    }
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**)