ASP.NET中的SQL参数列

时间:2018-08-11 21:31:06

标签: mysql sql asp.net

为什么不能在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);

这是为什么?是故意的吗?

1 个答案:

答案 0 :(得分:1)

因为select列是基本查询

您无法参数化基本查询,因此必须在代码处构建查询。

如果您想确定查询列的运行时间,也许可以尝试在Mysql中使用Prepared SQL Statement Syntax