我有一个业务是获取最新的几条数据,所以 我写了一个以下的DAL:public List<SoftMODEL> GetNewList(int intTop,string strOrderBy)
       {
           DataTable table = SqlHelper.ExecuteDataTable("select top @intTop * from T_Soft order by @strOrderBy", new SqlParameter("@intTop", intTop), new SqlParameter("@strOrderBy", strOrderBy)); 然后我在前台想用bll.GetNewList(7,"LinkID")来调用,但是这样的SQL语句有误,所以不能用。然后我改成拼接SQL,
SqlHelper.ExecuteDataTable("select top " + intTop + " * from T_Soft where Recommend = " + 1 + " order by " + strOrderBy + " desc");
这样能用。但是存在注入漏洞然后在网上询问后,我又改成如下
SqlHelper.ExecuteDataTable(@"select top (@intTop) * from T_Soft order by @strOrderBy",
   new SqlParameter("@intTop", intTop),
   new SqlParameter("@strOrderBy", strOrderBy));
经测试,如果没有order by @strOrderBy 则可以运营,如果带,则报错。由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量,作为标识列位置的表达式的一部分。按照引用列名的表达式排序时,只允许使用变量。
ORDER BY 这里应该怎么写?