

在access中由于不支持存储过程,不能建立临时表只能在程序中实现Access中实现如下,这也是我在myblog access版中使用的:public List<DayBook> GetPagedPost(PagedPost p, out int TotalRecords) { List<DayBook> list = new List<DayBook>();
using (OleDbConnection conn = GetOleDbConnection()) { StringBuilder sql = new StringBuilder(); sql.AppendFormat("select [ID] from blog_Content as p ");//构造查询条件 if (p.CategoryID > 0) { sql.AppendFormat(",blog_Categories AS c, blog_Links AS l WHERE c.CategoryID=l.CategoryID and (p.ID=l.PostID ) and c.CategoryID={1} and p.BlogID={0} ",p.BlogID, p.CategoryID); } else { sql.AppendFormat(" where p.blogID={0} ", p.BlogID); } if (p.PostType != PostType.Undeclared) { sql.AppendFormat(" and p.PostType={0} ", (int)p.PostType); } sql.Append(" order by p.[DateUpdated] desc"); // NetDiskContext.Current.Context.Response.Write(sql.ToString()); //NetDiskContext.Current.Context.Response.End(); OleDbCommand MyComm = new OleDbCommand(sql.ToString(), conn); List<int> IDs = new List<int>(); //获取主题ID列表 conn.Open(); using (OleDbDataReader dr = MyComm.ExecuteReader()) { while (dr.Read()) { IDs.Add((int)dr[0]); } } TotalRecords=IDs.Count;//返回记录总数 if (TotalRecords < 1) return list; int pageLowerBound = p.PageSize * p.PageIndex - p.PageSize;//记录索引 int pageUpperBound = pageLowerBound + p.PageSize ; StringBuilder sb = new StringBuilder(); if (TotalRecords >= pageLowerBound) for (int i = pageLowerBound; i < TotalRecords && i < pageUpperBound; i++) { sb.AppendFormat("{0},", IDs[i]);//构造ID in() 条件,取其中一页 } else return list; //如没有记录返回空表 if(sb.Length>1) sb.Remove(sb.Length - 1, 1);//删除最后一个逗号 MyComm.CommandText = string.Format("SELECT b.* , c.Account as Account FROM blog_Content b, Blog_Config c where b.BlogID=c.BlogID and b.[ID] in ({0}) order by b.dateadded desc", sb.ToString()); using (OleDbDataReader dr = MyComm.ExecuteReader()) { while (dr.Read()) { list.Add(DataHelp.LoadDayBook(dr)); } } return list; } }