我有一个业务是获取最新的几条数据,所以 我写了一个以下的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语中。
在群上网友给了一个拼接SQL字符串的方法。可行。
那用动态SQL的方法应该怎么写?
"select top (@intTop) * from T_Soft order by @strOrderBy"
SqlHelper.ExecuteDataTable(@"select top (@intTop) * from T_Soft order by (@strOrderBy)",
new SqlParameter("@intTop", intTop),
new SqlParameter("@strOrderBy",strOrderBy));
由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量,作为标识列位置的表达式的一部分。按照引用列名的表达式排序时,只允许使用变量。
这样写报错啊。
order by 这里出错了。。
这个写法有什么错误,具体的错误信息
top后面不能用参数化啊。
动态SQL就是拼接
order by后边应该是字段名吧 字段名虽然可以变化,但是 字段不需要参数化吧?
看看这篇 改造下你的实体类,方便sql的写法 http://www.cnblogs.com/needrunning/archive/2011/11/15/2250068.html