EF框架 與 Dapper框架 調用分頁存儲過程
- 2020 年 8 月 6 日
- 筆記
1. SqlServer創建存儲過程:
--創建存儲過程 create proc sp_Show ( @index int, --當前頁 @size int, --每頁大小 @totalcount int out, --總數據數 @pagecount int out --總頁數 ) as begin --計算總數據數 select @totalcount=COUNT(*) from Goods --(where name like '%'+ @name +'%') --計算總頁數 set @pagecount=CEILING(@totalcount*1.0/@size) if(@index<=0) set @index=1 if(@index>=@pagecount) set @index=@pagecount --分頁查詢 select * from (select ROW_NUMBER() over(order by GId) rn,*from Goods) tb1 where --(where name like '%'+ @name +'%') rn between ((@index-1)*@size)+1 and (@index*@size) end declare @x int,@y int exec sp_Show 1,2,@x out,@y out select @x 總數據數,@y 總頁數
2. Entity FrameWork框架:
//分頁存儲過程顯示 [HttpGet] public PageDate GetGoods2(int index, int size) { //實例化參數 SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@index",index), new SqlParameter("@size",size), new SqlParameter("@totalcount",SqlDbType.Int), //總數據數 new SqlParameter("@pagecount",SqlDbType.Int), //總頁數 }; //指定輸出參數 parameters[2].Direction = ParameterDirection.Output; parameters[3].Direction = ParameterDirection.Output; //存儲過程查詢 var list = db.Database.SqlQuery<Goods>("exec sp_Show @index,@size,@totalcount out,@pagecount out", parameters).ToList(); PageDate page = new PageDate(); page.List = list; page.PageCount = int.Parse(parameters[3].Value.ToString()); return page; }
3. Dapper框架:
//存儲過程分頁 [HttpGet] public PageDate GetGoods2(int index, int size) { //添加參數 var p = new DynamicParameters(); p.Add("@index", index); p.Add("@size", size); //指定輸出參數 p.Add("@totalcount", dbType: DbType.Int32, direction: ParameterDirection.Output); //總數據數 p.Add("@pagecount", dbType:DbType.Int32,direction:ParameterDirection.Output); //總頁數 List<Goods> list = new List<Goods>(); using (SqlConnection conn = new SqlConnection(connstr)) { list = conn.Query<Goods>("sp_Show",p,commandType:CommandType.StoredProcedure).ToList(); } PageDate page = new PageDate(); page.List = list; //獲取指定的參數值 page.PageCount = p.Get<int>("@pagecount"); return page; }