国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

生成多字段排序分頁的SQL的通用類

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:45:18
文檔

生成多字段排序分頁的SQL的通用類

生成多字段排序分頁的SQL的通用類:如果的單一字段排序分頁,現(xiàn)在有很多的存儲過程和SQL語句,分頁的時候,只取pageSize的記錄,可遇見的問題是: 這個單一字段必須是唯一的 這個字段必須是可以被排序的 不支持多字段排序 針對這一問題,我用C#做了一個類,解決以上的對多字段排序分頁和每次都
推薦度:
導讀生成多字段排序分頁的SQL的通用類:如果的單一字段排序分頁,現(xiàn)在有很多的存儲過程和SQL語句,分頁的時候,只取pageSize的記錄,可遇見的問題是: 這個單一字段必須是唯一的 這個字段必須是可以被排序的 不支持多字段排序 針對這一問題,我用C#做了一個類,解決以上的對多字段排序分頁和每次都

如果的單一字段排序分頁,現(xiàn)在有很多的存儲過程和SQL語句,分頁的時候,只取pageSize的記錄,可遇見的問題是:
這個單一字段必須是唯一的
這個字段必須是可以被排序的
不支持多字段排序
針對這一問題,我用C#做了一個類,解決以上的對多字段排序分頁和每次都取pageSize條記錄的問題 先看看代碼: 
代碼如下:

using System; 
using System.Collections.Specialized; 
namespace web 

    /// <summary> 
    /// MultiOrderPagerSQL 的摘要說明 
    /// </summary> 
    public class MultiOrderPagerSQL 
    { 
        private NameValueCollection orders = new NameValueCollection(); 
        private string table_; 
        private string where_="";//1=1 and 2=2 的格式 
        private string outfields_; 
        private int nowPageIndex_=0; 
        private int pagesize_=0; 
        private string sql_;//要返回的SQL 
        public MultiOrderPagerSQL() 
        { 
        } 
        /****************方法*******************/ 
        public void addOrderField(string field, string direction) 
        { 
            orders.Add(field, direction); 
        } 
        public string getSQL() 
        { 
            //排序字段 
            string orderList="";//用戶期望的排序 
            string orderList2 = "";//對用戶期望的排序的反排序 
            string orderList3 = "";//用戶期望的排序,去掉了前綴.復合查詢里的外層的排序不能是類似這樣的table1.id,要去掉table1.。 
            if (orders.Count > 0) 
            { 
                string[] str = orders.AllKeys; 
                foreach (string s in str) 
                { 
                    string direction="asc";//默認一個方向 
                    if (orders[s].ToString() == "asc") 
                        direction = "desc"; 
                    //去掉前綴的字段名稱 
                    string s2 = ""; 
                    int index = s.IndexOf(".") + 1; 
                    s2 = s.Substring(index); 
                    orderList =orderList + s +" "+ orders[s] +","; 
                    orderList2 = orderList2 + s2 + " " + direction + ","; 
                    orderList3 = orderList3 + s2 + " " + orders[s] + ","; 
                } 
                //去掉最后的,號 
                orderList = orderList.Substring(0,orderList.Length-1); 
                orderList2 = orderList2.Substring(0, orderList2.Length - 1); 
                orderList3 = orderList3.Substring(0, orderList3.Length - 1); 
            } 
            //return orderList2; 
            //形成SQL  
            string strTemp; 
            strTemp = "select * from \n ( select top {7} * from ( select top {6} {0} from {1} \n"; 
            if (where_ != "") 
                strTemp = strTemp + " where {2} \n"; 
            if(orderList!="") 
                strTemp = strTemp + " order by {3} ) as tmp order by {4} \n ) \n as tmp2 \n order by {5} \n"; 
            strTemp = string.Format(strTemp, outfields_, table_, where_, orderList, orderList2, orderList3, nowPageIndex_ * pagesize_, pagesize_); 
            return strTemp; 
        } 
        /****************屬性*******************/ 
        public string table 
        { 
            set { table_ = value; } 
        } 
        public string where 
        { 
            set { where_ = value; } 
        } 
        public string outfields 
        { 
            set { outfields_ = value; } 
        } 
        public int nowPageIndex 
        { 
            set { nowPageIndex_ = value; } 
        } 
        public int pagesize 
        { 
            set { pagesize_ = value; } 
        } 
    } 


說一下原理先:其實很簡單,由于AC和MS SQL 2000 沒有象MS SQL 2005的row_number函數(shù),我們就不能從這里下手了,比如你取第二頁,那就是序號從10-20,我們先按照某一排序規(guī)則 把 前 20條的數(shù)據(jù)取出來,然后再按照先前的排序規(guī)則的反規(guī)則把這個數(shù)據(jù)反排序,再取前10條,那么這個時候就是要取的數(shù)據(jù)了,這個時候還沒有結(jié)束,再把結(jié)果按照先前的排序規(guī)則排序即可。我覺得效率瓶頸會出現(xiàn)在排序上。看看是怎么來使用的:

代碼如下:
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
public partial class MultiOrderPagerSQLTest : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        web.MultiOrderPagerSQL sql = new web.MultiOrderPagerSQL(); 
        //sql.addOrderField("t1.id", "desc");//第一排序字段 
        sql.addOrderField("t1.hits", "desc");//第二排序字段 
        sql.table = "joke t1,type t2"; 
        sql.outfields = "t1.*,t2.type"; 
        sql.nowPageIndex = 5; 
        sql.pagesize = 10; 
        sql.where = "t1.typeid=t2.typeid"; 
        Response.Write(sql.getSQL()); 
    } 


以上在AC和MS SQL 2000(5)上測試通過。

暫時做出這樣一個類,沒有做成存儲過程,要做的話,還有一點難度呢 ,呵呵。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

生成多字段排序分頁的SQL的通用類

生成多字段排序分頁的SQL的通用類:如果的單一字段排序分頁,現(xiàn)在有很多的存儲過程和SQL語句,分頁的時候,只取pageSize的記錄,可遇見的問題是: 這個單一字段必須是唯一的 這個字段必須是可以被排序的 不支持多字段排序 針對這一問題,我用C#做了一個類,解決以上的對多字段排序分頁和每次都
推薦度:
標簽: 生成 條件 通用
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲欧美日韩在线观看 | 国内精品一区二区三区最新 | 亚洲欧美在线视频 | 91香蕉国产 | 亚洲一区二区三区高清 | 日本激情一区二区三区 | 欧美日本免费一区二区三区 | 国产精品一区二区三区四区 | 97精品国产91久久久久久久 | 国产成人精品一区二区三区 | 久久99国产精一区二区三区 | 在线播放国产精品 | 久久久无码精品亚洲日韩按摩 | 一级毛片免费下载 | 欧美激情一区二区亚洲专区 | 精品国产欧美一区二区五十路 | 可以免费观看的毛片 | 香港一级a毛片在线播放 | 精品日韩欧美一区二区三区 | 啪啪网址大全 | 久久伊人一区二区三区四区 | 亚洲精品不卡久久久久久 | 一区二区久久 | 国产精品成人一区二区1 | 国产精品高清在线观看 | 日本特级淫片免费 | 狠狠干欧美 | 国产精品99| 日本三级韩国三级欧美三级 | 成人久久久精品乱码一区二区三区 | 在线视频 日韩 | 欧美一级成人影院免费的 | 免费在线一级毛片 | a在线视频 | 亚洲v欧美v日韩v国产v | 欧美国产亚洲一区二区三区 | 精品成人一区二区三区免费视频 | 亚洲视频一区二区三区 | 欧美色图中文字幕 | 亚洲香蕉 | 中日韩一区二区三区 |