无效的列名"Math" - 从数据库中检索数据



有人能解释为什么会发生这种情况吗?我试图从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";

我已经检查了拼写错误或类型,一切正常。那么问题出在哪里呢?

您的问题是您的查询显示为

"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);

最新更新