分頁和組合查詢都是通過拼接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>></asp:ListItem> <asp:ListItem><</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 = 5; 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(1),hs); Repeater1.DataBind(); Yecode.Text = "1"; First.Enabled = false; Up.Enabled = false; for (int i = 1; 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 == "1") { 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) - 1; 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(1),hs); Repeater1.DataBind(); Yecode.Text = "1"; DropDownList1.SelectedIndex = 0; 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) - 1; Yecode.Text = Yeshu.ToString(); DropDownList1.SelectedIndex = Convert.ToInt32(Yecode.Text) - 1; Repeater1.DataSource = new CarData().select(TSQL(Yeshu),hs); Repeater1.DataBind(); if (Yecode.Text == "1") { 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) + 1; Yecode.Text = Yeshu.ToString(); DropDownList1.SelectedIndex = Convert.ToInt32(Yecode.Text) - 1; 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(1),hs); Repeater1.DataBind(); Yecode.Text = "1"; //調用組合查詢沒有進行分頁的拼接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", "1");//只顯示1 DropDownList1.Items.Add(li); } else //如果大於每頁顯示的條數 { //則下一頁和末頁可用。因為一上來首頁和上一頁是不可用的,當點擊下一頁或者末頁,就會觸發點擊事件,則其他按鈕就會可用 Down.Enabled = true; Over.Enabled = true; DropDownList1.Items.Clear();//將選擇頁面的下拉列表清空 for (int i = 1; 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 = 0; 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 > 0) { 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 > 0) { 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 > 0) { sql += " and code not in (select top " + count * (Yeshu - 1) + " code from car " + f1 + f2 + f3 + ")"; } else { sql += " where code not in (select top " + count * (Yeshu - 1) + " code from car " + f1 + f2 + f3 + ")"; } return sql; } //查詢所有符合條件的數據 public string Tsql() { hs.Clear(); int cc = 0; string sql = "select * from car"; if (TextBox1.Text != "") { sql += " where name like @name "; cc++; hs.Add("@name", "%" + TextBox1.Text + "%"); } if (TextBox2.Text != "") { if (cc > 0) { sql += " and oil like @oil "; } else { sql += " where oil like @oil "; } hs.Add("@oil", "%" + TextBox2.Text + "%"); cc++; } if (TextBox3.Text != "") { if (cc > 0) { 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)); } }