2

我正在使用 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{
// ...
}

是 SQL Server 中的ID类型numeric

问题是我总是遇到异常:

不存在数据时尝试读取无效。

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

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

4

2 回答 2

7

您需要遍历返回的阅读器行 - 使用如下代码:

SqlDataReader dr = command.ExecuteReader();

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

您需要至少调用一次才能实际.Read()读取数据SqlDataReader

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

while (dr.Read())
{
     .....
}

并处理返回的多行。

于 2013-11-08T17:18:13.217 回答
4

在开始读取数据之前,您需要将 DataReader 移动到第一行。
打电话Read()

于 2013-11-08T17:17:57.400 回答