2013-07-25 2 views
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(); 

ответ

1

Вторая инструкция while не работает, поскольку в SqlDataReader нет данных. Вы проверяете это точное состояние !reader.Read. Затем внутри цикла while вы пытаетесь прочитать данные от читателя.

Похоже, что здесь не хватает кода, но на основе того, что у вас есть, вы можете просто вывести второй оператор if в первый цикл while и сделать его другим. Просто убедитесь, что вы выходите из цикла, если проходит первая проверка.

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(); 
+0

привет, Tnx за вашу помощь! его не работает, потому что после второго, если инструкция if if (reader.HasRows) = false ", поэтому iam не попадает в if, если –

+0

Это указывает на отсутствие данных в таблице, которую вы пытаетесь использовать. Если вы хотите проверить свой код, попробуйте вставить некоторые примерные данные в требуемую таблицу и попробовать. :) – Josh

Смежные вопросы