使用ADO.NET 数据访问技术制作web端组合查询加分页的功能关键在于查询SQL语句的拼接

以Car 表为例 每页显示3条数据

数据访问类使用查询方法,tsql 查询的连接字符串,查询的参数放到Hashtable中

 public List<Car> Select(string tsql, Hashtable hh)
{
List<Car> list = new List<Car>();
cmd.CommandText = tsql;
cmd.Parameters.Clear();
foreach (string k in hh.Keys)
{
cmd.Parameters.Add(k, hh[k]);
}
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Car c = new Car();
c.Code = dr["Code"].ToString();
c.Name = dr["Name"].ToString();
c.Brand = dr["Brand"].ToString();
c.Oil = Convert.ToDecimal(dr["Oil"]);
c.Powers = Convert.ToInt32(dr["Powers"]);
c.Exhaust = Convert.ToInt16(dr["Exhaust"]);
c.Price = Convert.ToDecimal(dr["Price"]);
list.Add(c);
}
}
conn.Close();
return list;
}

后台代码封装查询连接字符的方法

/// <summary>
/// 拼接查询分页的SQL语句
/// </summary>
/// <param name="pagenumber">显示第几页</param>
/// <param name="isall">查最大页数的SQL语句</param>
/// <returns>查询sql语句的字符创</returns>
public string ReturnTsql(int pagenumber,bool isall)
{
hs.Clear();//清空哈希表数据
int count = ;//文本是否输内容
string Tsql = "select top " + pagecount + " *from Car";
if (isall)//true查所有拼接的语句
Tsql = "select *from Car";
string tj = "";
if (!string.IsNullOrEmpty(TextBox_name.Text.Trim()))//文本框有内容
{
Tsql += " where Name like @a";
tj += "where Name like @a";
hs.Add("@a", "%" + TextBox_name.Text.Trim() + "%");
count++;
}
if (!string.IsNullOrEmpty(TextBox_oil.Text.Trim()))
{
if (count == )
{
Tsql += " where Oil" + DropDownList_oil.SelectedValue + " @b";
tj += " where Oil" + DropDownList_oil.SelectedValue + " @b";
}
else
{
Tsql += " and Oil" + DropDownList_oil.SelectedValue + " @b";
tj += " and Oil" + DropDownList_oil.SelectedValue + " @b";
}
hs.Add("@b", TextBox_oil.Text.Trim());
count++;
}
if (!string.IsNullOrEmpty(TextBox_price.Text.Trim()))
{
if (count == )
{
Tsql += " where Price" + DropDownList_pri.SelectedValue + " @c";
tj += " where Price" + DropDownList_pri.SelectedValue + " @c";
}
else
{
Tsql += " and Price" + DropDownList_pri.SelectedValue + " @c";
tj += " and Price" + DropDownList_pri.SelectedValue + " @c";
}
hs.Add("@c", TextBox_price.Text.Trim());
count++;
}
//最终拼接的TSQL语句
if (count > )//文本框有输入
{
Tsql += " and Code not in(select top " + (pagecount * (pagenumber - )) + " Code from Car " + tj + ")";
}
else//没有输入
{
Tsql += " where Code not in(select top " + (pagecount * (pagenumber - )) + " Code from Car " + tj + ")";
}
return Tsql;
}
//查询最大页数
public int Maxpage(string tsql,Hashtable has)
{
List<Car> clist = new CarData().Select(tsql, has);
return Convert.ToInt32(Math.Ceiling(clist.Count / (pagecount * 1.0)));
}

功能代码 (查询 首页 下一页)

 int pagecount = ;//每页显示的数据
Hashtable hs = new Hashtable();//实例化一个全局的哈希表集合
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//加载页面数据绑定
{
Repeater1.DataSource = new CarData().Select(ReturnTsql(,false), hs);
Repeater1.DataBind();
Label_now.Text = "";//当前页数
Label_max.Text = Maxpage(ReturnTsql(,true), hs).ToString();//最大页数
DropDownList_jump.Items.Clear();//跳转页下拉列表数据绑定
for (int i = ; i <= Maxpage(ReturnTsql(, true), hs); i++)
{ DropDownList_jump.Items.Add(new ListItem(i.ToString(),i.ToString()));
}
}
Button_sel.Click += Button_sel_Click;//查询
LinkButton_frist.Click += LinkButton_frist_Click;//首页
LinkButton_prve.Click += LinkButton_prve_Click;//上一页
LinkButton_next.Click += LinkButton_next_Click;// 下一页
LinkButton_last.Click += LinkButton_last_Click;//尾页
DropDownList_jump.SelectedIndexChanged += DropDownList_jump_SelectedIndexChanged;//跳转
}
void Button_sel_Click(object sender, EventArgs e)// 查询
{
Label_now.Text = "";
Label1.Text = ReturnTsql(, false);
Repeater1.DataSource = new CarData().Select(ReturnTsql(, false), hs);
Repeater1.DataBind();
Label_max.Text = Maxpage(ReturnTsql(, true), hs).ToString();
DropDownList_jump.Items.Clear();
for (int i = ; i <= Maxpage(ReturnTsql(, true), hs); i++)
{ DropDownList_jump.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}
void LinkButton_frist_Click(object sender, EventArgs e)//首页
{
Label_now.Text = "";
Repeater1.DataSource = new CarData().Select(ReturnTsql(, false), hs);
Repeater1.DataBind();
//上一页按钮不可用,下一页按钮可用
LinkButton_next.Enabled = true;
LinkButton_prve.Enabled = false;
}
    void LinkButton_next_Click(object sender, EventArgs e)//下一页
{
int pagenumber = Convert.ToInt32(Label_now.Text) + ;
Repeater1.DataSource = new CarData().Select(ReturnTsql(pagenumber, false), hs);
Repeater1.DataBind();
Label_now.Text = pagenumber.ToString();//改变当前页数的显示数据
if (pagenumber >= Maxpage(ReturnTsql(,true),hs))//大于最大页数下一页按钮不可用
{
LinkButton_next.Enabled = false;
}
LinkButton_prve.Enabled = true;
}

Web 组合查询加 分页的更多相关文章

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

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

  2. webform组合查询和分页

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

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

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

  4. LinQ 组合查询与分页

    1.以开头查 public List<Car> Select1(string a){ return con.Car.Where(r => r.Name.StartsWith(a)). ...

  5. spring boot jpa 多条件组合查询带分页的案例

    spring data jpa 是一个封装了hebernate的dao框架,用于单表操作特别的方便,当然也支持多表,只不过要写sql.对于单表操作,jpake可以通过各种api进行搞定,下面是一个对一 ...

  6. LinkQ 组合查询与分页

    1.以开头查 public List<Car> Select1(string a){ return con.Car.Where(r => r.Name.StartsWith(a)). ...

  7. LINQ 组合查询 和分页查询的使用

    前端代码 <%@ Page Language="C#" AutoEventWireup="true" Debug="true" Cod ...

  8. linq分页组合查询

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

  9. Webform(Linq高级查、分页、组合查询)

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

随机推荐

  1. 一个防止误删MSSQL数据库的方法

    一个防止误删MSSQL数据库的方法 环境:Windows2008 R2 .SQL 2012 今天发现一个有趣的现象,之前数据库服务器的其中几个数据库做过镜像,不过现在已经删除了,今天又要在那台服务器上 ...

  2. etcd:用于服务发现的键值存储系统

    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...

  3. JVM 备注

    一.堆内存分布: JAVA 分为堆内存和栈内存,GC主要针对堆内存 1)Young: 存放新生内存对象 1.1)Eden JVM 刚开始分配的对象 1.2)Survivor1(from) 1.3)Su ...

  4. Java Socket

    什么是Socket Socket的概念很简单,它是网络上运行的两个程序间双向通讯的一端,既可以接收请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递. 所以简而言之,Socket就是进程通 ...

  5. Linux 配置YUM

    标签:MYSQL/linux 概述 文章主要介绍配置163,mysql,epel这三个yum源. 目录 概述 步骤 下载安装包 卸载自带的yum 安装yum包 添加yum 总结 步骤 安装163源 注 ...

  6. Java集合类的总结

    Java语言的java.until包中提供了一些集合类,这些集合类又被称为容器.说到集合就会想到数组,集合类与数组的不同之处是,数组的长度是固定的,集合的长度是可变的:数组用来存放基本数据类型,集合从 ...

  7. 自定义模拟一个Spring IOC容器

    一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...

  8. 神奇的CSS sprites,制作特效的新方法

    本文主要内容简译自Dava Shea的英文文章 CSS Sprites: Image Slicing’s Kiss of Death,如果觉得博主讲的含糊不清的话,可以看作者原文. 熟悉了常规切图的我 ...

  9. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  10. 我和linux的第二十二天

    这几天学校的事情比较多,空闲时间也有,但没有利用起来.前些天听国学课,发觉自己心性还是不很成熟,以前自觉遇到君子应用君子的方法相处,遇到小人用小人的方法对待,老师一句话,疏清了自己.当我们用小人的方法 ...