c#
  • login
  • 2014-09-10 87 views -5 likes 
    -5

    我在DB希德和密碼,並將其包含在SID =塞南和密碼= pass1234 當我進入這個細節到我的登錄屏幕總是我得到的失敗消息框請告訴我,爲什麼這個查詢不工作

    SqlDataAdapter cmd = new SqlDataAdapter("select Count(*) from [user] where Sid=' " + textBox1.Text + " ' and password='" + textBox2.Text + "'", cnn); 
    DataTable dt = new DataTable(); 
    cmd.Fill(dt); 
    if (dt.Rows[0][0].ToString() == "1") 
        MessageBox.Show("pass"); 
    else 
        MessageBox.Show("fail"); 
    
    +6

    您是否試過單步執行代碼以查看正在傳遞的值? – jbutler483 2014-09-10 10:14:40

    +0

    在附註上 - 您確實需要修復可怕的SQL注入漏洞。 – Cylindric 2014-09-10 10:15:53

    +0

    @steve這是一個答案,爲什麼不這樣發佈呢? – Cylindric 2014-09-10 10:16:24

    回答

    0

    錯誤來自簡單的錯字。您已將空間添加到爲Sid條件傳遞的值。
    但是您的查詢應該這樣

    string cmdText = "select Count(*) from [user] where [email protected] and [email protected]"; 
    SqlCommand cmd = new SqlCommand(cmdText, cnn) 
    cmd.Parameters.AddWithValue("@sid", textBox1.Text); 
    cmd.Parameters.AddWithValue("@pwd", textBox2.Text); 
    int count = Convert.ToInt32(cmd.ExecuteScalar()); 
    if (count > 0) 
        MessageBox.Show("pass"); 
    else 
        MessageBox.Show("fail"); 
    

    這種方法被重寫使用參數化查詢,以避免Sql Injection,並直接使用的SqlCommand的沒有建立SqlDataAdapterDataTableSqlCommand.ExecuteScalar是當您需要簡單檢索單行的第一列或調用標量T-SQL函數時使用的正確方法,如COUNT()

    作爲便箋,請記住,以明文形式存儲密碼你的數據庫是一個很大的安全問題。誰有權訪問數據庫將能夠讀取每個用戶的密碼。密碼應該是stored as a computed hash並且檢查用戶輸入的數據重複散列算法。

    +0

    謝謝你它現在的工作 – 2014-09-10 10:24:35

    +0

    很高興成爲幫助。作爲一個新用戶,我希望向你推薦[這篇關於如何接受有用答案的文章](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Steve 2014-09-10 10:29:25

    +1

    感謝您提供所有這些信息,我將閱讀如何使用哈希來保護我的密碼。 – 2014-09-10 10:34:37

    相關問題