ASP.NET 分頁+組合查詢 練習


分頁和組合查詢都是通過拼接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 = 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));
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM