0

我收到此错误:

Unknown column 'admin' in 'where clause'

这是我的登录按钮代码:

        mycon.Open();
        string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = " + textBox1.Text + "";
        cmd = new MySqlCommand(cmdstr, mycon);
        dr = cmd.ExecuteReader();
        string inputpw = "";
        string dbpw = "";
        while (dr.Read())
        {
            inputpw = maskedTextBox1.Text;
            dbpw = (dr["user_pw"].ToString());
        }
        dr.Close();
        mycon.Close();

我不太明白为什么会出现该错误,因为我的 Select 语句与我在网上看到的所有其他 select 语句相同

4

4 回答 4

7

用单引号将文本框值括起来

 string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = '" + textBox1.Text + "'";

编辑:

正如蒂格兰所评论的那样。使用参数化查询,而不是仅连接来自控件的值

于 2012-12-18T11:44:21.583 回答
3

我不太明白为什么会出现该错误

然后开始调试。在行上放一个断点cmd =并检查cmdstr的内容。你会看到查询是:

SELECT * FROM usersettingsdb WHERE user_ID = admin

然后你会看到你需要在用户名周围加上引号。现在阅读有关 SQL 注入、参数化查询和 DAL 的信息。

于 2012-12-18T11:53:06.070 回答
1

您需要在围绕 textbox1.Text 的 where 子句中添加一组额外的“”,否则您不会将字符串传递给它。

string cmdstr = "SELECT * FROM usersettingsdb WHERE user_ID = \"" + textBox1.Text + "\"";
于 2012-12-18T11:45:33.813 回答
1

做这样的事情..

 string cmdstr = string.Format("SELECT * FROM usersettingsdb " + 
                "WHERE user_ID = '{0}'", textBox1.Text.Replace("'","''"));

替换'''因为 sql 认为'转义字符

但是建议使用参数化查询

于 2012-12-18T11:56:07.803 回答