ASP.NET中没有数据时无效的读取尝试

Aan*_*Aan 2 c# sql-server asp.net

我正在使用C#来学习ASP.NET,我尝试将身份验证代码编写为

SqlCommand command = new SqlCommand("Select [ID] from [Inspector] WHERE [ID] ='111' AND [Password] ='111';", conn);

SqlDataReader dr = command.ExecuteReader();

if (dr[0].ToString() == username)
{
Session["UserAuthentication"] = username;
Session.Timeout = 1;
Response.Redirect("About.aspx");
}
else{
// ...
}
Run Code Online (Sandbox Code Playgroud)

ID类型是numeric在SQL Server中.

问题是我总是得到例外:

没有数据时无效尝试读取.

在这部分:if (dr[0].ToString() == username).

我试图直接执行确切的SQL语句,我可以得到结果.

mar*_*c_s 7

你需要遍历读者返回的行 - 使用类似这样的代码:

SqlDataReader dr = command.ExecuteReader();

if(dr.Read())
{
    if (dr[0].ToString() == username)
    {
        Session["UserAuthentication"] = username;
        Session.Timeout = 1;
        Response.Redirect("About.aspx");
    }
    else {
       // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

你需要调用.Read()SqlDataReader至少一次,以实际读取的数据.

如果您计划读取尽可能多的行,则应使用

while (dr.Read())
{
     .....
}
Run Code Online (Sandbox Code Playgroud)

并处理返回的多行.