SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@colname", "id,name,role") };
string sql = "select @colname from demo"以上的代码是实现不了的问题:如果不采用存储过程,代码直接传递字符串sql语句,能不能在sql语句的列名上使用参数化(例如上面代码)?sql 参数化 

解决方案 »

  1.   

    http://heeroluo.net/Article/Detail/61
    可以啊,没有要求一定要存储过程啊
      

  2.   

    列名不能参数化,不过你可以使用string.Format()
    string[] columns = { "id", "name", "role" };
    string sql = string.Format("select {0} from demo", string.Join(", ", columns));
      

  3.   

    列名不可以参数,
    不如把整个sql参数化好了SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@sql", "select id,name,role from demo") };
    string sql = "@sql"
      

  4.   


    真的没有办法参数化吗,不能的话你这样写也没什么作用,无法阻止这么写string[] columns = { "top 10 id", "name", "role" };,还是直接传递字符串再判断吧
      

  5.   

    SqlParameter[] paras ...
    columns = paras.Select(x => x.Value.ToString()).ToArray();
      

  6.   

    列名不要带空格,构造SQL之前去掉空格和逗号引号这些非法字符,也就没有注入风险了。
      

  7.   

    我记得好像ID和BOOL类型不能用占位符填充
      

  8.   

    假设可以参数化,那你那样写是select id,name,role这三列呢还是select "id,name,role"这一个字符串呢?
    还是拼字符串吧