分页

/// <summary>
/// 分页
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public string ShowPage(Item item, string Auto_Price_Starttime, string Auto_Price_Endtime)
{
System.Data.SqlClient.SqlCommand cmd = null;
string connStr = DAL.ControllerFactory.GetNewController(DAL.e_ConsType.Main2).ConnectionString;
string returnstr = string.Empty;
int page = item.page;
int size = item.rows;
try
{

using (SqlConnection sc = new SqlConnection(connStr))
{
cmd = sc.CreateCommand();
SqlParameter[] para ={
new SqlParameter("@recordTotal",SqlDbType.Int),
new SqlParameter("@keyName",SqlDbType.VarChar),
new SqlParameter("@pageSize",SqlDbType.Int),
new SqlParameter("@pageNo",SqlDbType.Int),
new SqlParameter("@whereString",SqlDbType.VarChar)

};

SqlParameter prmrecordTotal = new SqlParameter("@recordTotal", SqlDbType.Int);
SqlParameter prmkeyName = new SqlParameter("@keyName", SqlDbType.VarChar);
SqlParameter prmPageSize = new SqlParameter("@pageSize", SqlDbType.Int);
SqlParameter prmpageNo = new SqlParameter("@pageNo", SqlDbType.Int);
SqlParameter prmwhereString = new SqlParameter("@whereString", SqlDbType.VarChar);


prmrecordTotal.Direction = ParameterDirection.InputOutput;
prmrecordTotal.Value = 0;
prmPageSize.Value = size;
prmpageNo.Value = page;
prmkeyName.Value = "b.Id";
prmwhereString.Value = GetSelectWhere(item, Auto_Price_Starttime, Auto_Price_Endtime);

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "P_GridViewPager";
cmd.Parameters.Add(prmrecordTotal);
cmd.Parameters.Add(prmkeyName);
cmd.Parameters.Add(prmPageSize);
cmd.Parameters.Add(prmpageNo);
cmd.Parameters.Add(prmwhereString);

SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd);
DataTable dt1 = new DataTable();
adapter.Fill(dt1);

int resultcount = (int)prmrecordTotal.Value;

Hashtable hash = new Hashtable();
hash.Add("total", resultcount);
hash.Add("rows", dt1);
returnstr = Newtonsoft.Json.JsonConvert.SerializeObject(hash);
}
}
catch (Exception ex)
{

}
return returnstr;
}

 

 

 

存储过程:

 
 CREATE PROCEDURE [dbo].[P_GridViewPager] (  
     @recordTotal INT OUTPUT,            --输出记录总数  
     --@viewName VARCHAR(800),        --表名  
     --@fieldName VARCHAR(800) = '*',        --查询字段  
     @keyName VARCHAR(200) = 'Id',            --索引字段  
     @pageSize INT = 20,                    --每页记录数  
     @pageNo INT =1,                    --当前页  
     --@orderString VARCHAR(200),        --排序条件  
     @whereString VARCHAR(800) = '1=1'        --WHERE条件  
 )  
 AS  
 BEGIN  
      DECLARE @beginRow INT  
      DECLARE @endRow INT  
      DECLARE @tempLimit VARCHAR(200)  
      DECLARE @tempCount NVARCHAR(1000)  
      DECLARE @tempMain VARCHAR(1000)  
      --declare @timediff datetime   
        
      set nocount on  
      --select @timediff=getdate() --记录时间  
   
      SET @beginRow = (@pageNo - 1) * @pageSize    + 1  
      SET @endRow = @pageNo * @pageSize  
      SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)  
        
      --输出参数为总记录数  
      SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM [fanhua_risk].[dbo].[Auto_Price] a     
                                    left   join  [fanhua_risk].[dbo].[Auto_Price_All] b  on   a.Auto_Price_All_ID=b.ID WHERE '+@whereString+') AS my_temp'  
      EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT  
          
      --主查询返回结果集  
      SET @tempMain = 'SELECT  * FROM (SELECT ROW_NUMBER() OVER (order by b.id desc) AS rows ,a.*,b.TotalPrice as TotalPrice_All,b.TotalPrice_End  FROM [fanhua_risk].[dbo].[Auto_Price] a     
                                    left   join  [fanhua_risk].[dbo].[Auto_Price_All] b  on   a.Auto_Price_All_ID=b.ID WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit + 'order by id desc'  
        
      --PRINT @tempMain  
      EXECUTE (@tempMain)  
      --select datediff(ms,@timediff,getdate()) as 耗时   
        
      set nocount off  
 END  
  

posted @ 2017-03-21 14:50  突破零  阅读(117)  评论(1编辑  收藏  举报