我不知道sql语法有什么错误

时间:2019-04-02 09:32:54

标签: c# mysql

我正在使用C#和MySQL实现登录表单,用户应输入他/她的用户名和密码,然后选择他/她是学生,教师还是管理员。 然后我要检查输入的值是否正确,这是我的代码:

connection.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "Select * from @userType where username=@user and password=@pass";
cmd.Parameters.AddWithValue("@userType", userType);
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);

cmd.Connection = connection;
MySqlDataReader login = cmd.ExecuteReader();

但是查询没有成功! 错误消息:

  

MySql.Data.MySqlClient.MySqlException,HResult = 0x80004005,   Message =您的SQL语法有误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   靠近“学生”,其中用户名=“ noor123”,密码=“ 123456”   行Source = MySql.Data

错误是什么?

2 个答案:

答案 0 :(得分:2)

该代码生成的SQL查询为:

Select * from 'student' where username="noor123" and password="123456"

该表不能放在''内,因为这不是正确的SQL语法。

您不能使用参数作为表名,而是这样做,这样就不会为表名获得''

connection.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "Select * from " + userType.ToString() + " where username=@user and password=@pass";
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);

cmd.Connection = connection;
MySqlDataReader login = cmd.ExecuteReader();

答案 1 :(得分:0)

如果这只是一项任务,而不是实际程序,请执行以下操作。

  1. 确保变量userType,user和pass的类型为String。
  2. 确保userType代表语法正确的表或视图名称。
  3. 更新此行06
  4. 删除此行cmd.CommandText = $"Select * from {userType} where username=@user and password=@pass";

我认为这应该有所帮助。我没有检查自己。

但是,在现实世界中,您不应该这样编程。在处理身份验证/授权时,有许多安全注意事项,但没有提及sql注入的可能性。如果这是一个真实的项目,那么我建议您阅读有关该主题的适当材料。