1

我正在尝试创建一个 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();
4

2 回答 2

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();
于 2013-07-26T17:46:53.190 回答
1

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

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

于 2013-07-25T13:21:19.543 回答