分页和组合查询都是通过拼接SQL语句到数据库查询进行实现

到汽车表(car)中查询 ,汽车表选取了“编号 code”,“车名 name”,“日期 time”,“油耗 oil ”,“马力 powers”这几列

分页查询语句:每页只显示五条数据

查询前五条数据: select top 5 from car

点击下一页按钮:select top 5 from car where code not in(select top 5 code from car)//第二页的时候通过编号,查询前五条之后的数据,第三页括号里top 10,每加一页跳过前面查过的条数,一次类推,需要定义变量等于1,每次加一页给这个变量重新赋值,让5乘以这个变量

上一页按钮也是用此方法

组合查询语句:根据车名、油耗、和马力查询

根据选中的条件进行拼接SQL语句:select * from car where name like '%xxx%' and oil like '%xxx%' and powers > xxx ;

通过选择的任意条件,进行判断,如果前面条件选中,后面跟and xxx,如果前面条件没选中就直接where xxx

分页和组合查询连起来就是:select top 5 from car where  name like '%xxx%' and oil like '%xxx%' and powers > xxx and  code not in(select top 5 code from car);根据不同的选择条件进行拼接,在数据库写一个查询的方法,将拼接好的SQL语句传参到方法中进行执行,调用此方法在前台显示

代码:

数据库实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; /// <summary>
/// Car 的摘要说明
/// </summary>
public class Car
{
public Car()
{
//
// TODO: 在此处添加构造函数逻辑
//
} //封装一个汽车表的实体类
private string _code;//汽车编号 public string Code
{
get { return _code; }
set { _code = value; }
}
private string _name;//汽车名字 public string Name
{
get { return _name; }
set { _name = value; }
}
private DateTime _time;//出产日期 public DateTime Time
{
get { return _time; }
set { _time = value; }
}
private decimal _oil;//油耗 public decimal Oil
{
get { return _oil; }
set { _oil = value; }
}
private int _powers;//马力 public int Powers
{
get { return _powers; }
set { _powers = value; }
}
}

数据库操作类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Collections; /// <summary>
/// CarData 的摘要说明
/// </summary>
public class CarData
{
SqlConnection conn = null;
SqlCommand cmd = null;
public CarData()
{
conn = new SqlConnection("server=.;database=netlx;user=sa;pwd=123;");
cmd = conn.CreateCommand();
} /// <summary>
/// 查询车辆信息
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public List<Car> select(string sql,Hashtable has)
{
List<Car> list = new List<Car>();
cmd.CommandText = sql;
cmd.Parameters.Clear(); foreach (string s in has.Keys)
{
cmd.Parameters.Add(s, has[s]);
}
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Car cc = new Car();
cc.Code = dr["code"].ToString();
cc.Name = dr["name"].ToString();
cc.Time = Convert.ToDateTime(dr["time"]);
cc.Oil = Convert.ToDecimal(dr["oil"]);
cc.Powers = Convert.ToInt32(dr["powers"]);
list.Add(cc);
}
}
conn.Close();
return list;
}
}

页面前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default1.aspx.cs" Inherits="Default1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
#Bt {
position: relative;
font-family: 黑体;
font-size: 50px;
text-align: center;
letter-spacing: 5px; /*字符间距*/
}
#Cx {
height:30px;
margin-top:20px;
}
table {
background-color: #07066f;
width: 100%;
} #Bt1 {
font-family: 微软雅黑;
font-size: 25px;
color: white;
text-align: center;
} #Nr {
font-family: 微软雅黑;
font-size: 25px;
background-color: white;
text-align: center;
} td {
padding: 10px;
}
</style>
</head>
<body>
<div id="Bt">汽车信息展示</div>
<form id="form1" runat="server">
<div id="Cx">
车名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
油耗:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 马力:<asp:DropDownList ID="Tjf" runat="server">
<asp:ListItem>&gt;</asp:ListItem>
<asp:ListItem>&lt;</asp:ListItem>
<asp:ListItem>=</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<asp:Button ID="Select" runat="server" Text="确 定" />
</div>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr id="Bt1">
<td>编号</td>
<td>车名</td>
<td>日期</td>
<td>油耗</td>
<td>马力</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr id="Nr">
<td><%#Eval("Code") %></td>
<td><%#Eval("Name") %></td>
<td><%#Eval("Time") %></td>
<td><%#Eval("Oil") %></td>
<td><%#Eval("Powers") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
当前是第[<asp:Label ID="Yecode" runat="server" Text="Label"></asp:Label>]页
<asp:LinkButton ID="First" runat="server">首页</asp:LinkButton>
<asp:LinkButton ID="Up" runat="server">上一页</asp:LinkButton>
<asp:LinkButton ID="Down" runat="server">下一页</asp:LinkButton>
<asp:LinkButton ID="Over" runat="server">末页</asp:LinkButton>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"></asp:DropDownList>
</form>
</body>
</html>

后台代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class Default1 : System.Web.UI.Page
{
int count = ;
Hashtable hs = new Hashtable();//创建一个全局的哈希表集合,用来放SQL语句中的条件,防攻击
protected void Page_Load(object sender, EventArgs e)
{
Select.Click += Select_Click;//条件查询的确定按钮
Down.Click += Down_Click;//下一页按钮点击事件
Up.Click += Up_Click;//上一页按钮点击事件
First.Click += First_Click;//首页按钮点击事件
Over.Click += Over_Click;//末页按钮点击事件
DropDownList1.SelectedIndexChanged += DropDownList1_SelectedIndexChanged;//下拉列表选中提交事件
if (IsPostBack == false)
{
Repeater1.DataSource = new CarData().select(TSQL(),hs);
Repeater1.DataBind();
Yecode.Text = "";
First.Enabled = false;
Up.Enabled = false; for (int i = ; i <= MaxNumber(); i++)
{
ListItem li = new ListItem(i.ToString(), i.ToString());
DropDownList1.Items.Add(li);
}
} } //下拉列表选中提交事件
void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
int xy = Convert.ToInt32(DropDownList1.SelectedItem.Value);
Repeater1.DataSource = new CarData().select(TSQL(xy),hs);
Repeater1.DataBind();
Yecode.Text = xy.ToString();
if (Yecode.Text == "")
{
First.Enabled = false;
Up.Enabled = false;
Over.Enabled = true;
Down.Enabled = true;
}
else if (Yecode.Text == MaxNumber().ToString())
{
First.Enabled = true;
Up.Enabled = true;
Over.Enabled = false;
Down.Enabled = false;
}
else
{
First.Enabled = true;
Up.Enabled = true;
Over.Enabled = true;
Down.Enabled = true;
}
} //末页按钮点击事件
void Over_Click(object sender, EventArgs e)
{
Repeater1.DataSource = new CarData().select(TSQL(MaxNumber()),hs);
Repeater1.DataBind();
Yecode.Text = MaxNumber().ToString();
DropDownList1.SelectedIndex = Convert.ToInt32(Yecode.Text) - ;
First.Enabled = true;
Up.Enabled = true;
Down.Enabled = false;
Over.Enabled = false;
} //首页按钮点击事件
void First_Click(object sender, EventArgs e)
{
Repeater1.DataSource = new CarData().select(TSQL(),hs);
Repeater1.DataBind();
Yecode.Text = "";
DropDownList1.SelectedIndex = ;
First.Enabled = false;
Up.Enabled = false;
Down.Enabled = true;
Over.Enabled = true;
} //上一页按钮点击事件
void Up_Click(object sender, EventArgs e)
{
int Yeshu = Convert.ToInt32(Yecode.Text) - ;
Yecode.Text = Yeshu.ToString();
DropDownList1.SelectedIndex = Convert.ToInt32(Yecode.Text) - ;
Repeater1.DataSource = new CarData().select(TSQL(Yeshu),hs);
Repeater1.DataBind();
if (Yecode.Text == "")
{
First.Enabled = false;
Up.Enabled = false;
}
Down.Enabled = true;
Over.Enabled = true;
} //下一页按钮点击事件
void Down_Click(object sender, EventArgs e)
{
int Yeshu = Convert.ToInt32(Yecode.Text) + ;
Yecode.Text = Yeshu.ToString();
DropDownList1.SelectedIndex = Convert.ToInt32(Yecode.Text) - ;
Repeater1.DataSource = new CarData().select(TSQL(Yeshu),hs);
Repeater1.DataBind();
if (Yecode.Text == MaxNumber().ToString())
{
Down.Enabled = false;
Over.Enabled = false;
}
First.Enabled = true;
Up.Enabled = true;
} //条件查询的确定按钮
void Select_Click(object sender, EventArgs e)
{
Repeater1.DataSource = new CarData().select(TSQL(),hs);
Repeater1.DataBind();
Yecode.Text = ""; //调用组合查询没有进行分页的拼接SQL语句的方法去数据库进行查询
List<Car> data = new CarData().select(Tsql(),hs);
if (data.Count <= count)//如果查询到的数据的数量少于每页显示的条数
{
First.Enabled = false;//则这些翻页按钮就不可用
Up.Enabled = false;
Down.Enabled = false;
Over.Enabled = false;
DropDownList1.Items.Clear();//将选择页面的下拉列表清空
ListItem li = new ListItem("", "");//只显示1
DropDownList1.Items.Add(li);
}
else //如果大于每页显示的条数
{
//则下一页和末页可用。因为一上来首页和上一页是不可用的,当点击下一页或者末页,就会触发点击事件,则其他按钮就会可用
Down.Enabled = true;
Over.Enabled = true;
DropDownList1.Items.Clear();//将选择页面的下拉列表清空
for (int i = ; i <= MaxNumber(); i++) //根据查出来的最大页数,重新赋值
{
ListItem li = new ListItem(i.ToString(), i.ToString());
DropDownList1.Items.Add(li);
}
}
} //根据条件拼接一个SQL语句方法
public string TSQL(int Yeshu)
{
hs.Clear();
int ccc = ;
string f1="";
string f2="";
string f3="";
string sql = "select top "+count+" * from car";
if (TextBox1.Text != "")
{
sql += " where name like @name ";
ccc++;
f1=" where name like @name ";
hs.Add("@name", "%" + TextBox1.Text + "%");
}
if (TextBox2.Text != "")
{
if (ccc > )
{
sql += " and oil like @oil ";
f2 = " and oil like @oil ";
}
else
{
sql += " where oil like @oil ";
f2 = " where oil like @oil ";
}
hs.Add("@oil", "%" + TextBox2.Text + "%");
ccc++;
}
if (TextBox3.Text != "")
{
if (ccc > )
{
sql += " and powers " + Tjf.SelectedItem.Value + " @powers";
f3=" and powers " + Tjf.SelectedItem.Value + " @powers";
}
else
{
sql += " where powers" + Tjf.SelectedItem.Value + " @powers";
f3=" where powers" + Tjf.SelectedItem.Value + " @powers";
}
hs.Add("@powers", TextBox3.Text);
ccc++;
} //分页语句
if (ccc > )
{
sql += " and code not in (select top " + count * (Yeshu - ) + " code from car " + f1 + f2 + f3 + ")";
}
else
{
sql += " where code not in (select top " + count * (Yeshu - ) + " code from car " + f1 + f2 + f3 + ")";
}
return sql;
} //查询所有符合条件的数据
public string Tsql()
{
hs.Clear();
int cc = ;
string sql = "select * from car";
if (TextBox1.Text != "")
{
sql += " where name like @name ";
cc++;
hs.Add("@name", "%" + TextBox1.Text + "%");
}
if (TextBox2.Text != "")
{
if (cc > )
{
sql += " and oil like @oil ";
}
else
{
sql += " where oil like @oil ";
}
hs.Add("@oil", "%" + TextBox2.Text + "%");
cc++;
}
if (TextBox3.Text != "")
{
if (cc > )
{
sql += " and powers " + Tjf.SelectedItem.Value + " @powers";
}
else
{
sql += " where powers" + Tjf.SelectedItem.Value + " @powers";
}
hs.Add("@powers", TextBox3.Text);
cc++;
}
return sql;
}
//根据上面查找数据的数量,除以每页显示的,得到的结果取上限值,得到的是最大页数
public int MaxNumber()
{
List<Car> ccc = new CarData().select(Tsql(),hs); double bbb = ccc.Count / (count * 1.0); //总页数,但是是浮点型
return Convert.ToInt32(Math.Ceiling(bbb));
}
}

ASP.NET 分页+组合查询 练习的更多相关文章

  1. ASP.NETMVC4 分页组合查询解决方法

    本人新手刚在webform转到mvc   像linq  ef啥的,都是不会的不行不行的,不会就问群友,找资料 今天本屌遇到了一个分页组合查询的问题,解决了2个小时,把代码共享给大家 话不多话,直接上代 ...

  2. Linq组合查询与分页组合查询结合

    1.组合查询 <div>姓名:<asp:TextBox ID="T1" runat="server"></asp:TextBox& ...

  3. 【2017-06-02】Linq高级查询,实现分页组合查询。

    1.以XXX开头 2.以XXX结尾 3.模糊查询 4.求个数 5.求最大值 6.求最小值 7.求平均值 8.求和 9.升序 10.降序 11.分页 Skip()跳过多少条 Take()取多少条 12. ...

  4. webform:分页组合查询

    一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql"& ...

  5. Webform--LinQ 分页组合查询

    一.linq高级查 1.模糊查(字符串包含) public List<User> Select(string name) { return con.User.Where(r => r ...

  6. linq分页组合查询

    一.linq高级查 1.模糊查(字符串包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r = ...

  7. webform 分页、组合查询综合使用

    界面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx ...

  8. webform组合查询和分页

    1.组合查询(1)数据访问类 //参数1:SQL语句 参数2:哈希表public List<Users> chas(string s,Hashtable has) { List<Us ...

  9. LINQ 小项目【组合查询、分页】

    使用 linq 在网页上对用户信息增删改,组合查询,分页显示 using System; using System.Collections.Generic; using System.Linq; us ...

随机推荐

  1. 《SDN软件定义网络从入门到精通》导论课

    http://mp.weixin.qq.com/s?__biz=MjM5MTM3MzIzMg==&mid=209513316&idx=1&sn=e5dbd9a2ccccb88d ...

  2. Android WebView清空缓存

    Android原生和H5混合开发,要求用户退出登录后清空H5所有的缓存: 1.清空Cookie CookieSyncManager.createInstance(context.getApplicat ...

  3. luogu Eat the Trees

    /* 用和模板类似的方法就行 但是实际上弱化版不用考虑匹配情况限制更加宽松, 只需要保存每个位置有无插头即可, */ #include<cstdio> #include<algori ...

  4. 安全测试6_Web安全工具第一节(浏览器入门及扩展)

    今天来学习下浏览器的功能,浏览器是我们经常用到但是功能却很强大的一个东东,我们经常用到的无非是三种(谷歌.火狐.IE) 1.浏览器功能介绍: 下面以谷歌浏览器(Chrome版本为56)为例,介绍下,懂 ...

  5. Linux 虚拟机VMware安装失败,提示没有选择磁盘

    提示安装位置:没有选择磁盘 磁盘类型问题. 在新建虚拟机向导时会推荐选项 重新安装就有磁盘了

  6. 安装配置fastDFS文件服务器 - Linux

    一.配置linux环境 1.新建虚拟机 把上次安装的CentOS7的文件复制一份,并改名 打开VM>打开虚拟机,选择刚才复制好的虚拟机,并启动.这样做的目的主要是为了保留一份最基础的母本,为了将 ...

  7. PHP解决网站大流量与高并发

    1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的.主要影响服务器的速度 有:网络-硬 ...

  8. 排查bug的步骤

    原创文章,欢迎阅读,禁止转载. bug预防C/C++代码发布前的检查:检查有没有低级错误,可用cppcheck (bug预防是指在写程序的时候,bug没出现,积极的进行预防,减少.包括良好的编码风格. ...

  9. 机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪器) 5.cv2.writer(将图片写入视频中) 6.cv2.dnn.blobFromImage(图片归一化) 10.multiprocessing.process(生成进程)

    1. cv2.dnn.readNetFromCaffe(prototxt, model)  用于进行SSD网络的caffe框架的加载 参数说明:prototxt表示caffe网络的结构文本,model ...

  10. JAVA企业级快速开发平台,JEECG 3.7.3 新春版本发布

    JEECG 3.7.3新春版本发布 -  微云快速开发平台 导读           ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...