不知道sql语法有什么错误

我正在使用 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 服务器版本相对应的手册,了解在“student”附近使用的正确语法,其中用户名='noor123' 和密码='123456'' 在 Source=MySql.Data 行


错误是什么?


芜湖不芜
浏览 85回答 2
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();

catspeake

如果这只是一个作业而不是真实世界的程序,那么请执行以下操作。确保变量 userType、user 和 pass 是 String 类型。确保 userType 表示语法正确的表或视图名称。更新这一行cmd.CommandText = $"Select * from {userType} where username=@user and password=@pass";删除此行cmd.Parameters.AddWithValue("@userType", userType);我相信这应该有所帮助。我没有检查自己。然而在现实世界中你不应该这样编程。在处理身份验证/授权时有许多安全考虑因素,更不用说 sql 注入的可能性了。如果这是一个真实的项目,那么我建议您阅读有关该主题的适当材料。
打开App,查看更多内容
随时随地看视频慕课网APP