没有数据时读取的尝试无效
本文关键字:无效 读取 数据 | 更新日期: 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();