日期:2014-05-17  浏览次数:20344 次

简单的sql列名参数化问题,解决马上给分

SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@colname", "id,name,role") };
string sql = "select @colname from demo"

以上的代码是实现不了的

问题:如果不采用存储过程,代码直接传递字符串sql语句,能不能在sql语句的列名上使用参数化(例如上面代码)?
sql? 参数化?

------解决方案--------------------
列名不能参数化,不过你可以使用string.Format()
string[] columns = { "id", "name", "role" };
string sql = string.Format("select {0} from demo", string.Join(", ", columns));
------解决方案--------------------
列名不可以参数,
不如把整个sql参数化好了

SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@sql", "select id,name,role from demo") };
string sql = "@sql"

------解决方案--------------------
列名不要带空格,构造SQL之前去掉空格和逗号引号这些非法字符,也就没有注入风险了。
------解决方案--------------------
假设可以参数化,那你那样写是select id,name,role这三列呢还是select "id,name,role"这一个字符串呢?
还是拼字符串吧