【问题标题】:Invalid attempt to read when no data无数据时尝试读取无效
【发布时间】:2013-07-27 01:46:53
【问题描述】:

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

【问题讨论】:

    标签: c# sqldatareader


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您好 tnx 为您提供帮助!它不起作用,因为在第二个 if 语句“ if(reader.HasRows) = false” 之后,所以我没有进入 if
      • 表示您要使用的表中没有数据。如果您想测试您的代码,请尝试将一些示例数据放入所需的表中并尝试一下。 :)
      猜你喜欢
      • 2018-09-05
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多