为什么不能使用SQL语句中的参数作为列名?我想了两个小时才发现问题出在哪里。唯一可能的方法是以一种容易受到SQL注入攻击的方式进行(对我来说这不是问题,因为参数是在服务器端生成的)。
这是有效的:
string cmdgetValues = "SELECT " + column + " FROM user WHERE " + filterColumn + " = @filter";
MySqlCommand getValues = new MySqlCommand(cmdgetValues, connectionDB);
getValues.Parameters.AddWithValue("@filter", filterValue);
这不起作用:
string cmdgetValues = "SELECT @column FROM user WHERE @filterColumn = @filter";
MySqlCommand getValues = new MySqlCommand(cmdgetValues, connectionDB);
getValues.Parameters.AddWithValue("@column", column);
getValues.Parameters.AddWithValue("@filterColumn", filterColumn);
getValues.Parameters.AddWithValue("@filter", filterValue);
这是为什么?是故意的吗?
最佳答案
因为select
列是基本查询
不能对基本查询进行参数化,因此必须在代码处生成查询。
如果您想决定查询列运行时,可以尝试在Mysql中使用Prepared SQL Statement Syntax。
关于mysql - ASP.NET中的SQL参数列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51803905/