C#winform如何实现数据库查询并分页
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform如何实现数据库查询并分页相关的知识,希望对你有一定的参考价值。
如何为6个表查询数据后。并且分页显示?
数据量特别大。怎么也得有三十多万条吧?
如何在这上面添加?每页显示1000条。。。
这是存储过程
ALTER procedure [dbo].[SP_OnceSum_SelectPageByCompany]
@CompanyId int,
@PageSize int,
@PageIndex int,
@ConsumeMode int,
@StartDate datetime,
@EndDate datetime,
@ColumnName nvarchar(50),
@ColumnValue nvarchar(50),
@MinMoney float,
@MaxMoney float
as
begin
select
dbo.OnceSum.Id AS '编号',
row_number() over (order by Driver.Number) as '序号' ,
dbo.Driver.Number AS '服务证号',
dbo.Driver.Name AS '姓名',
convert(nvarchar(10),dbo.OnceSum.Date,111) AS '日期',
subString(convert(nvarchar(7),dbo.OnceSum.StartDate,108),1,5) AS '上车时间',
subString(convert(nvarchar(7),dbo.OnceSum.EndDate,108),1,5) AS '下车时间',
dbo.OnceSum.WaitDates AS '等待时间(分钟)',
dbo.OnceSum.OperateDistance AS '营运里程(Km)',
convert(numeric(18,2),dbo.OnceSum.[Money]) AS '计费金额(元)',
dbo.OnceSum.EmptyDistance AS '空驶里程(Km)',
dbo.Fun_GetConsumeMode(dbo.OnceSum.ConsumeMode) AS '消费方式',
dbo.Car.Number AS '自编号',
dbo.Car.CarNumber AS '车牌号',
dbo.CarGroup.Name AS '公司',
dbo.CarGroup.Number AS '公司代码',
dbo.CarType.Name AS '车型',
convert(numeric(18,2),dbo.OnceSum.EmptyDistance/(dbo.OnceSum.OperateDistance+dbo.OnceSum.EmptyDistance)) as '空驶率'
from
dbo.Car ,
dbo.CarGroup ,
dbo.CarType ,
dbo.Company ,
dbo.Driver ,
dbo.OnceSum
where
dbo.Car.Id = dbo.Driver.CarId and
dbo.CarGroup.Id = dbo.Driver.CarGroupId and
dbo.CarType.Id = dbo.Car.CarTypeId and
dbo.Company.Id = dbo.CarGroup.CompanyId and
dbo.Company.Id = dbo.Car.CompanyId and
dbo.Driver.Id = dbo.OnceSum.DriverId and
dbo.Company.Id=@CompanyId and
(
(dbo.OnceSum.ConsumeMode = 0 and @ConsumeMode = 0 ) or
(dbo.OnceSum.ConsumeMode = 1 and @ConsumeMode = 1) or
@ConsumeMode = 2
) and
(
(@ColumnName='CarGroupId' and Convert(nvarchar(50),CarGroup.Id) like '%'+@ColumnValue+'%') or
(@ColumnName='Car_Number' and Car.Number like '%'+@ColumnValue+'%') or
(@ColumnName='DriverNumber' and Driver.Number like '%'+@ColumnValue+'%') or
(@ColumnName='CarNumber' and Car.CarNumber like '%'+@ColumnValue+'%') or
(@ColumnName='' and @ColumnValue='') or
(@ColumnName='CarGroupId' and @ColumnValue='')
) and
dbo.OnceSum.[Money] >= @MinMoney and
dbo.OnceSum.[Money] <= @MaxMoney and
dbo.OnceSum.[StartDate] >= @StartDate and
dbo.OnceSum.[EndDate] <= @EndDate
end
select top 1000 * from 表 where 主键 not in
(select top (页码*1000) 主键 from 表 )
第一个*号代表所有,
第二个*号代表乘以 参考技术A 我想如果你学过数列这个问题相对来说就好解决多了,数列对应的通项公式算出的值就是每页的第一行!对于自增量就是你每页显示数据的条目数了!
数据量非常大,比如说你每页显示十条数据,建立一个存储数据A的地方,先存放100条,客户端要的数据都在这里曲,A的数据都来源于B,b每次到数据库中读取整段数据,a.b类似于数据缓存!本回答被提问者采纳
scroll事件实现监控滚动条并分页显示示例(zepto.js)
scroll事件实现监控滚动条并分页显示示例(zepto.js )
需求:在APP落地页上的底部位置显示此前其他用户的购买记录,要求此div盒子只显示3条半,但一页有10条,div内的滑动条滑到一页底部自动加载下一页并发加载埋点。
实现:首先理解三个概念,分别是contentH,viewH,scrollTop。
contentH:即所要滑动的元素内容的高度,包括可见部分以及滚动条下面的不可见部分。
ViewH:即我们看到的这个DIV的高度,不包括可见部分也不包括滚动条下面的不可见部分。
scrollTop:即滚动条距离顶部的距离,若scrollTop的值为0,则代表滚动条在最上面。拉动滚动条,从最上面到最下面,变化的是scrollTop的值。例:假如contentH的高度为2000,而这个DIV的高度只有300,那么还有1700不可见,拉动滚动条到最底部,此时scrollTop为1700,所以这个1700也可以理解为滚动条可以滚动的长度。当滑动条拉到底部的时候,contentH=viewH+scrollTop。
故可实现如下:
$.ajax({ type: "get", url: "record.json",//测试用假数据 dataType: "json", success: function (records) { var showLength = records.data.length;//需要显示的总长度 var flag = showLength <= 10 ? showLength : 10; load_records(0, flag);//开始加载第一页 hxmClickStat(‘mar_all_207_ssjk.goumai.load.‘ + 1, {url_ver: "SJCGBS-10030"});//不论长度是否超过10都发送第一页埋点 if (showLength > 10) { var origin = 1, load = 2; $(‘.records_body‘).scroll(function () { var contentH = $(this).get(0).scrollHeight; var viewH = $(‘.records_body‘).height(); var scrollTop = $(this).scrollTop(); var pages = Math.ceil(showLength / 10);//需要显示的总页数 if (viewH + scrollTop == contentH && load <= pages) { if (load * 10 < showLength) { load_records(origin++ * 10, load++ * 10);//加载下一页的10条数据 hxmClickStat(‘mar_all_207_ssjk.goumai.load.‘ + origin, {url_ver: "SJCGBS-10030"});//滑动到底部开始加载下一页时发送埋点 } else { load_records(origin * 10, showLength);//加载最后一页 hxmScrollBottomStat(‘mar_all_207_ssjk.goumai.bottom‘, {url_ver: "SJCGBS-10030"});//最后一页发送埋点 load++;//避免重复执行 } } }); } function load_records(start, end) { for (var i = start; i < end; i++) { var stime = records.data[i].time; var accure_time = stime.slice(5, stime.length); var record_html = ‘<div class="records_item"><img src=‘ + records.data[i].avatar + ‘ class="avatar"/><div class="buyer_info"><p class="buyer_name">‘ + records.data[i].account + ‘</p><p class="status_title">购买成功</p></div>\n\<‘ + ‘div class="buyer_address"><p class="buy_address">‘ + records.data[i].city + ‘ IP:‘ + records.data[i].ip + ‘</p>\n\<‘ + ‘p class="buy_time">‘ + accure_time + ‘</p></div></div>‘; $(record_html).appendTo(‘.records_body‘);//插入一条购买记录 } } }, error: function () { console.log(‘some errors happened!‘); } });
以上方法在苹果手机浏览器中会达不到预期效果,解决方法及代码改进
将触底判断条件更改为
if (viewH + scrollTop +1>= contentH && load <= pages)
究其原因,故在滚动时将scrollTop和viewH、contentH分别打印出来,滑到底部的时候发现他们有1个单位的误差,可能是因为某些div元素的高度不为整数而js在判断的时候直接将其取整了,故可以选择将其加1。
也可以使用另一种方式百分比的判断条件来实现:在滚动条距离底端2%以内:scrollTop / (contentH– viewH) >= 0.98。
或者使用绝对数值范围来实现,滚动条距离底端30px以内:contentH – viewH – scrollTop <= 30。
以上是关于C#winform如何实现数据库查询并分页的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页