2013-07-25 128 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循環中並使其成爲一個else語句。如果第一次檢查通過,請確保您退出循環。

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

相關問題