为什么我得到System.IndexOutOfRangeException:EmpPassword

时间:2014-12-18 21:35:34

标签: asp.net

 myreader = obj.ExecuteReader 
 If myreader.Read Then 
    Session.Item("emp_id") = myreader("emp_id")
    Session.Item("Email") = myreader("e_mail")
    Session.Item("password") = myreader("EmpPassword") 
 ElseIf TextBox1.Text = "123456" Then 
     Response.Redirect("home.aspx")
 Else 
     Response.Redirect("personal.aspx") 
 End If

2 个答案:

答案 0 :(得分:0)

当您尝试从阅读器中读取查询的SELECT字段列表中不存在的字段时,会生成错误。因此,如果您想阅读EmpPassword值,则需要将查询更改为

Dim query = "SELECT emp_id, E_mail, EmpPassword from personaldetails " & _
            "where [E_mail] =@E_mail and EmpPassword =@EmpPassword"
Dim obj = new SqlCommand(query, connection)
.... add the parameters....
myreader = obj.ExecuteReader 
.......

但是,您已经知道密码和电子邮件值,因为您需要设置where子句所需的参数,这样您就可以避免从阅读器中读取它们并将字段添加到选择列表中。

答案 1 :(得分:0)

Select语句应包含您要检索的所有字段 -

SELECT  emp_id, [E_mail], EmpPassword
FROM    personaldetails
WHERE   [E_mail] = @E_mail
        AND EmpPassword = @EmpPassword

- 或 -

由于您已经知道 e_mail EmpPassword ,因此您只能选择 emp_id ,并指定 e_mail 和<来自原始值的 EmpPassword -

select [emp_id] from personaldetails 
where [E_mail] =@E_mail and EmpPassword =@EmpPassword

Session.Item("emp_id") = myreader("emp_id")
Session.Item("Email") = e_mail
Session.Item("password") = EmpPassword