public Thread MyThread { get { return myThread; } set { myThread = value; } } public void StartThread() { myThread = new Thread(new ThreadStart(RunFunction)); myThread.Start(); } private string connectString = "data source=(local);database=fox;uid=sa;pwd=123"; /// <summary> /// 总的记录数 /// </summary> private int recordCount = 0;
public int RecordCount { get { return recordCount; } set { recordCount = value; } } private int currengPage = 1;
public int CurrengPage { get { return currengPage; } set { currengPage = value; } } /// <summary> /// 每页显示字段 /// </summary> private int showCount;
public int ShowCount { get { return showCount; } set { showCount = value; } } private string swhere;
public string Swhere { get { return swhere; } set { swhere = value; } } private DataTable dtRecord;
public DataTable DtRecord { get { return dtRecord; } set { dtRecord = value; } }
public void RunFunction() { SqlConnection lvConn = new SqlConnection(connectString); lvConn.Open(); SqlCommand lvCmd = new SqlCommand("[Page_PROC]", lvConn);//调用的存储过程 lvCmd.CommandType = CommandType.StoredProcedure; SqlParameter[] parameters = { new SqlParameter("@TblName",SqlDbType.VarChar), new SqlParameter("@ID",SqlDbType.VarChar), new SqlParameter("@CurrentPage",SqlDbType.Int), new SqlParameter("@PageSize",SqlDbType.Int), new SqlParameter("@FldName",SqlDbType.VarChar), new SqlParameter("@OrderType",SqlDbType.Int), new SqlParameter("@StrWhere",SqlDbType.VarChar)
使用存储过程分页吧,那样会提高执行的效率 CREATE procedure main_table_pwqzc (@pagesize int, @pageindex int, @docount bit, @this_id) as if(@docount=1) begin select count(id) from luntan where this_id=@this_id end else begin declare @indextable table(id int identity(1,1),nid int) declare @PageLowerBound int declare @PageUpperBound int set @PageLowerBound=(@pageindex-1)*@pagesize set @PageUpperBound=@PageLowerBound+@pagesize set rowcount @PageUpperBound insert into @indextable(nid) select id from luntan where this_id=@this_id order by reply_time desc select a.* from luntan a,@indextable t where a.id=t.nid and t.id>@PageLowerBound and t.id <=@PageUpperBound order by t.id end GO
存储过程会根据传入的参数@docount来确定是不是要返回所有要分页的记录总数 特别是这两行
set rowcount @PageUpperBound insert into @indextable(nid) select id from luntan where this_id=@this_id order by reply_time desc
真的是妙不可言!!set rowcount @PageUpperBound当记录数达到@PageUpperBound时就会停止处理查询 ,select id 只把id列取出放到临时表里,select a.* from luntan a,@indextable t where a.id=t.nid and t.id>@PageLowerBound and t.id <=@PageUpperBound order by t.id 而这句也只从表中取出所需要的记录,而不是所有的记录,结合起来,极大的提高了效率!! 妙啊,真的妙!!!!
/*Set sorting variables.*/ IF CHARINDEX('DESC',@Sort)>0 BEGIN SET @strSortColumn = REPLACE(@Sort, 'DESC', '') SET @operator = ' <=' END ELSE BEGIN IF CHARINDEX('ASC', @Sort) = 0 SET @strSortColumn = REPLACE(@Sort, 'ASC', '') SET @operator = '>=' END
IF CHARINDEX('.', @strSortColumn) > 0 BEGIN SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn)) SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) + 1, LEN(@strSortColumn)) END ELSE BEGIN SET @SortTable = @Tables SET @SortName = @strSortColumn END
SELECT @type=t.name, @prec=c.prec FROM sysobjects o JOIN syscolumns c on o.id=c.id JOIN systypes t on c.xusertype=t.xusertype WHERE o.name = @SortTable AND c.name = @SortName
IF CHARINDEX('char', @type) > 0 SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
/*Default Page Number*/ IF @PageNumber < 1 SET @PageNumber = 1
/*Set paging variables.*/ SET @strPageSize = CAST(@PageSize AS varchar(50)) SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))
/*Set filter & group variables.*/ IF @Filter IS NOT NULL AND @Filter != '' BEGIN SET @strFilter = ' WHERE ' + @Filter + ' ' SET @strSimpleFilter = ' AND ' + @Filter + ' ' END ELSE BEGIN SET @strSimpleFilter = '' SET @strFilter = '' END IF @Group IS NOT NULL AND @Group != '' SET @strGroup = ' GROUP BY ' + @Group + ' ' ELSE SET @strGroup = ''
/*Execute dynamic query*/ EXEC( ' DECLARE @SortColumn ' + @type + ' SET ROWCOUNT ' + @strStartRow + ' SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + ' SET ROWCOUNT ' + @strPageSize + ' SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + ' ' ) GO