/// <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