c#
  • login
  • 2014-09-10 97 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

    相关问题