2014-03-05 45 views
0

這是我的代碼:數據讀取器和無效的嘗試時不存在數據讀取

protected void logujButton_Click(object sender, EventArgs e) 
{ 
    string user = "data source=myHostServer; database = myDataBase; user id=myLogin; password=myPassword"; 
    SqlConnection con2 = new SqlConnection(user); 
    con2.Open(); 

    string loguj = "select count(*) from uzytkownik where Login = '"+ logujTextBox.Text +"'"; 
    SqlCommand command = new SqlCommand(loguj, con2); 
    int wartosc = Convert.ToInt32(command.ExecuteScalar().ToString()); 
    con2.Close(); 

    if (wartosc == 1) 
    { 
     con2.Open(); 
     SqlCommand pobierzHaslo = new SqlCommand("select Haslo from uzytkownik where Login = '" + logujTextBox.Text + "'", con2); 
     SqlDataReader rdr = pobierzHaslo.ExecuteReader(); 
     string haslo = rdr["Haslo"].ToString(); 
     if (haslo == hasloTextBox.Text) 
     { 
      errorLabel.Text = "Prawidlowe Haslo !"; 
     } 
     else 
     { 
      errorLabel.Text = "Zle haslo !"; 
     } 
    } 
    else 
    { 
     errorLabel.Text = "Taki uzytkownik nie istnieje !"; 
    } 
} 

當我按下按鈕,這個錯誤是出現:「無效的嘗試時,不存在數據讀」。你能告訴我,我犯了什麼錯誤嗎?感謝您的建議!

+0

調試您的代碼並告訴我們發生了哪一行。 –

+0

這行有一個問題「string haslo = rdr [」Haslo「]。ToString();」 – Shagohad

+1

請閱讀[參數化查詢](http://en.wikipedia.org/wiki/Prepared_statement)。您當前的方法很容易受到SQL注入攻擊。 –

回答

1

您還沒有讀過任何東西。你必須調用read()方法:

SqlDataReader rdr = pobierzHaslo.ExecuteReader(); 
if (rdr.Read()) 
{ 
     string haslo = rdr["Haslo"].ToString(); 
     .... 
} 
+0

謝謝你!現在它正在工作,但有一些我不明白的錯誤。 Reader正在從數據庫中正確地接收值,但是prgoram正在執行「else」語句中的代碼,而不是「if」中的代碼。這是爲什麼 ?。我知道來自redader的價值是正確的,因爲在「else statemnet」我改變了'errorLabel.Text =「Zle haslo!」;'到'errorLabel.Text = haslo;'中。 – Shagohad

+0

好的,我找到了一個解決方案。問題在於數據庫。我改變了列數據類型,工作正常。 – Shagohad

+0

太好了。別客氣! –

0

如果你有機會獲得SSMS,在查詢窗口中直接運行查詢,並確保你找回數據。您的查詢可能不好。根據錯誤消息的文本,這很可能是SqlDataReader的ExecuteReader方法中的錯誤。

相關問題