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

本文关键字:无效 读取 数据 | 更新日期: 2023-09-27 18:25:04

我正在尝试制作一个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();

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

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

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

对于给定的情况,我会这样做。我假设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();