无数据时无效尝试读取

时间:2013-07-25 12:24:26

标签: c# sqldatareader

我正在尝试创建一个while语句,用于检查数据库中是否存在用户指定的名称。如果没有,他将需要再次键入,直到名称存在于数据库中。

我收到并且“没有数据时无效尝试读取”。第二个while循环的异常。我该怎么办?

SqlDataReader reader = com.ExecuteReader();

while (reader.Read())
{
    string FirstName1 = (string)reader["FirstName"].ToString();

    if (FirstName1 != param.ToString())
    {
        Console.WriteLine();
        Console.WriteLine("Permision Grantet for: {0}",FirstName1);
    }

    return;
}

while (!reader.Read())
{
    string firstname2 = (string)reader["FirstName"].ToString();

    if (firstname2 != param.ToString())
    {

        Console.WriteLine("Permision Grantet for: {0}", firstname2);
    }

}

cn.Close();

2 个答案:

答案 0 :(得分:1)

第二个while语句失败,因为SqlDataReader中没有数据。您正在检查确切的条件!reader.Read。然后在while循环内部尝试从读取器读取数据。

感觉这里缺少一些代码,但根据你所拥有的,你可以简单地将第二个if语句拉入第一个while循环并将其作为else。如果第一次检查通过,请确保退出循环。

答案 1 :(得分:1)

这就是我对给定案例所做的事情。我假设param是输入变量,并且还考虑了如果用户输入错误的用户名,则会反复提示用户输入用户名,直到输入为零。

while(param != "0")
{
  Console.WriteLine("Enter Username: ");
  param = Console.ReadLine();

  com = new SqlCommand("Select username from table_name", cn); 
  SqlDataReader reader = com.ExecuteReader();

  if( reader.HasRows)
  {
    while (reader.Read())
    {
      string FirstName1 = reader["FirstName"].ToString();

      if (FirstName1 != param.ToString()) 
      {
         Console.WriteLine();
         Console.WriteLine("Permission Granted for: {0}",FirstName1);
         param = 0;
      }

      return;
    }
  }

  else
  {
    Console.WriteLine();
    Console.WriteLine("Invalid username! Please try again. To quit, press 0.");
  }
 }
 cn.Close();