无效的列名“数学” - 从数据库中检索数据

Posted

技术标签:

【中文标题】无效的列名“数学” - 从数据库中检索数据【英文标题】:Invalid column name 'Math' - retrieving data from database 【发布时间】:2020-12-28 20:19:15 【问题描述】:

有人可以解释为什么会这样吗?我正在尝试从 mysql 数据库中检索数据,但是会发生此错误,但是当我检索诸如 TeacherID 之类的整数值时,相同的代码可以正常工作。重新遍历非数字值时出现问题。

string connectionString = (@"Data Source=(LocalDB)\v11.0;AttachDbFilename=\myDB.mdf;Integrated Security=True");
        string sql = "SELECT * FROM Teacher WHERE Subject = "+ TSubject.Text;
        SqlConnection connection = new SqlConnection(connectionString);
        SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
        DataSet ds = new DataSet();
        connection.Open();
        dataadapter.Fill(ds, "Teacher");
        connection.Close();
        DataGridViewStudent.DataSource = ds;
        DataGridViewStudent.DataMember = "Teacher";

我已经检查了拼写错误或类型,一切正常。所以有什么问题。

【问题讨论】:

使用占位符和“修复自身”的问题。使用这种构建 SQL 字符串的非常糟糕的方式会导致值没有被正确引用;这是“意外”注射。它还可能导致恶意注入。请不要遵循手动添加正确字符串引号的建议。 ***.com/questions/7505808/…, visualstudiomagazine.com/articles/2017/07/01/… 等。遵循这些模式将使生活更容易 这能回答你的问题吗? How to give ADO.NET Parameters esqew 它对我有用,谢谢 那不是 MySQL 数据库。 【参考方案1】:

您的问题是您的查询结果为

"SELECT * FROM Teacher WHERE Subject = Math"

Math 没有被引用,因此被假定为列而不是值。

您可以(但不应该)解决此问题的一种方法是手动添加引号。而是将查询参数化。

string sql = "SELECT * FROM Teacher WHERE Subject = @SUBJECT";

Sqlcommand command = new SqlCommand(sql, connection);
command.Parameter.Add(new SqlParameter("@SUBJECT", TSubject.Text));
SqlDataAdapter dataadapter = new SqlDataAdapter(command);

【讨论】:

我相信我现在已经修复了明显的错误,尽管它仍然只是一个 sn-p。

以上是关于无效的列名“数学” - 从数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:尝试检索视图条目时列名无效

如何从数据框中检索行名和列名?

c#从数据库中读取图片出现参数无效

c#从数据库中读取图片出现参数无效

2 检索数据

如何修复 SqlException:列名无效