Asp.net 为什么我得到System.IndexOutOfRangeException:EmpPassword

Asp.net 为什么我得到System.IndexOutOfRangeException:EmpPassword,asp.net,Asp.net,当您尝试从读卡器读取查询的“选择字段”列表中不存在的字段时,会生成此错误。因此,如果您想读取EmpPassword值,您需要将查询更改为 myreader = obj.ExecuteReader If myreader.Read Then Session.Item("emp_id") = myreader("emp_id") Session.Item("Email") = myreader("e_mail") Session.Item("password") =

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

 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

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

select语句应包括要检索的所有字段-

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 
.......
-或-

由于您已经知道电子邮件和emp密码,因此您可以仅选择emp id,并从原始值中分配电子邮件和emp密码-

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

显示用于提取此数据的SELECT语句。此语句从personaldetails中选择[E\u mail],其中[E\u mail]=@E\u mail和EmpPassword=@EmpPassword如果未在SELECT之间列出EmpPassword字段,则无法从读取器中读回。此外,emp_id似乎丢失,同样的错误欢迎访问SO。我很高兴你解决了这个问题。如果这回答了您的问题,请将其标记为答案。它将帮助其他寻找相同答案的人。
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