我们使用列表查询数据时,数据量少还可以,当公司数据达到上万条,上千万条是我们还能一次查询出来完吗,当然是不能的,此刻我就说一下只查询该页的数据
首先我这里使用的datatable插件,定义一个方法用来显示数据
function InitTables() {
$('#datatable-grid').DataTable({
searching: false,
bLengthChange: false,
scrollX: true,
"bPaginate": true, //开关,是否显示分页器
'iDisplayLength': 10, //每页初始显示20条记录
"bSort": false, //是否可排序
"pagingType": "first_last_numbers",
"serverSide": true, //是否开启服务器分页
"columns": [
{
title: 'ID序号', data: 'ID', align: 'center', width: "100px"
},
],
"ajax": {
url: 这里是你要访问的路径,例如前缀名“window.location.protocol + "//" ”
type: "post", //访问类型
contentType: "application/json;charset=utf-8",
data: function (data) {
var jsonData = {
mothed: 'GetComeinandoutData', //访问的方法
filed: JSON.stringify({
name: $("#name").val(),//这里就是你要查询的条件的传值
length: data.length, //一页显示的数据数
start: data.start //从第几条开始查询
}),
asscesstoken: CommJS.GetCookie("token")
};
return JSON.stringify(jsonData); //传送条件到方法
},
dataSrc: function (json) { //返回数据
//console.log(json);
json.recordsFiltered = json.result.total; // 指定记录数
json.recordsTotal = json.result.total; // 指定页数
return json.result.data;
}
},
});
}
下边后台数据我都不贴了,大概讲一下
首先获取前台传过来的数据,进行条件的赋值然后进行第一个方法
第一个方法里边就是获取你要查询数据的总个数例:where就是你给条件赋值的条件
var count= BLL.ListCount(where);
下边这个就是ListCount方法,返回是总数
public object GetCarListCount(string wherein, string whereout)
{
string sql = $@"select count(*) from table {where}";
return ExecuteScalar(sql);
}
第二个方法就是根据要查询的页数来查询数据,传入的三个值是 ()条件,要查询的开始页数,该页的长度)
var dt = BLL.List(where, start, length);
public DataTable List(string where, int start, int length)
{
string sql = $@" select * from table {where} order by ID desc offset {start} rows fetch next {length} rows only";
return GetDataTable(sql);
}
上边的offset 页数 rows fetch next 长度 rows only语句就是只查询当前页的几个数据,这样减少查询时间
我们返回数据
var obj = new
{
total = count,
data = dt
};
这样在前台就可以通过这两个字段来返回数据了