access数据库是不支持ROW_NUMBER()的,但是我用动软生成器生成出来的数据操作层的代码有这样的一个方法
/// <summary>
/// 分页获取数据列表
/// </summary>
public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("SELECT * FROM ( ");
strSql.Append(" SELECT ROW_NUMBER() OVER (");
if (!string.IsNullOrEmpty(orderby.Trim()))
{
strSql.Append("order by T." + orderby );
}
else
{
strSql.Append("order by T.id desc");
}
strSql.Append(")AS Row, T.* from article_xh T ");
if (!string.IsNullOrEmpty(strWhere.Trim()))
{
strSql.Append(" WHERE " + strWhere);
}
strSql.Append(" ) TT");
strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
return DbHelperOleDb.Query(strSql.ToString());
}
,我在access的sql视图里测试老是错误,提示,语法丢失,操作符错误。
怎么写才对呢?
--第一种 select top 10 * from user where id not in (select top 5 id from user order by id )order by id --第二种 select top 10 * from user where id > ( select MAX(id) from ( select top 5 Id from user order by id ) a ) order by id --这两种都支持access,用的access2013测试的
当然,这个方法只有在MSSQL2005及以上版本才支持Row_Number
生成SQL的代码这么简单,如果地方就一处,你重写一下这个函数不就OK了吗,要么就换数据库吧,access,MSSQL,Orace,MySQL都支持SQL,但肯定不能完全通用的。
换成Access的分页方式呗,top分页。