为什么我在 C# WinForms to MySQL 数据库中的 SELECT 语句中收到此错误



我收到此错误:

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 语句相同

文本框值括在单引号中

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

编辑:

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

的值

不太明白为什么我会收到这个错误

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

SELECT * FROM usersettingsdb WHERE user_ID = admin

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

在 textbox1 周围的 where 子句中需要一组额外的 " "。文本,否则不会传递字符串。

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

做这样的事情。

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

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

但是使用参数化查询是值得推荐的。

最新更新