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