• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuā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)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    生成多字段排序分頁(yè)的SQL的通用類(lèi)

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:45:18
    文檔

    生成多字段排序分頁(yè)的SQL的通用類(lèi)

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

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

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

        /// <summary> 
        /// MultiOrderPagerSQL 的摘要說(shuō)明 
        /// </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="";//用戶(hù)期望的排序 
                string orderList2 = "";//對(duì)用戶(hù)期望的排序的反排序 
                string orderList3 = "";//用戶(hù)期望的排序,去掉了前綴.復(fù)合查詢(xún)里的外層的排序不能是類(lèi)似這樣的table1.id,要去掉table1.。 
                if (orders.Count > 0) 
                { 
                    string[] str = orders.AllKeys; 
                    foreach (string s in str) 
                    { 
                        string direction="asc";//默認(rèn)一個(gè)方向 
                        if (orders[s].ToString() == "asc") 
                            direction = "desc"; 
                        //去掉前綴的字段名稱(chēng) 
                        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] + ","; 
                    } 
                    //去掉最后的,號(hào) 
                    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; } 
            } 
        } 


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

    代碼如下:
    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)上測(cè)試通過(guò)。

    暫時(shí)做出這樣一個(gè)類(lèi),沒(méi)有做成存儲(chǔ)過(guò)程,要做的話(huà),還有一點(diǎn)難度呢 ,呵呵。

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

    文檔

    生成多字段排序分頁(yè)的SQL的通用類(lèi)

    生成多字段排序分頁(yè)的SQL的通用類(lèi):如果的單一字段排序分頁(yè),現(xiàn)在有很多的存儲(chǔ)過(guò)程和SQL語(yǔ)句,分頁(yè)的時(shí)候,只取pageSize的記錄,可遇見(jiàn)的問(wèn)題是: 這個(gè)單一字段必須是唯一的 這個(gè)字段必須是可以被排序的 不支持多字段排序 針對(duì)這一問(wèn)題,我用C#做了一個(gè)類(lèi),解決以上的對(duì)多字段排序分頁(yè)和每次都
    推薦度:
    標(biāo)簽: 生成 條件 通用
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專(zhuān)題
    Top
    主站蜘蛛池模板: 国产在线精品一区二区不卡 | 欧美精品v欧洲精品| 久久精品无码专区免费 | 91精品成人免费国产| 国产精品无码久久综合| 久久这里只精品国产99热| 99久久精品免费国产大片| 国产精品久久久99| 无码人妻精品一区二区三区99不卡 | 国产成人无码精品久久久免费| 久久亚洲精品无码AV红樱桃| 欧美精品色婷婷五月综合| 亚洲午夜精品第一区二区8050| 婷婷精品国产亚洲AV麻豆不片 | 久久国产热这里只有精品| 亚洲国产精品国产自在在线| 亚洲国产精品无码专区影院| 97久久精品国产精品青草| 国产精品成人观看视频| 99久久人妻无码精品系列| 亚洲精品无码午夜福利中文字幕 | 国产午夜精品无码| 在线观看日韩精品| 亚洲精品成人a在线观看| 国产美女精品视频| 久久免费的精品国产V∧| 亚洲AV蜜桃永久无码精品| 国内精品欧美久久精品| 国产色婷婷五月精品综合在线| 一本一本久久aa综合精品| 亚洲国产精品成| 永久免费精品影视网站| 免费视频精品一区二区| 精品久久久久久久久久中文字幕 | 久久夜色精品国产亚洲av| 久久99精品久久久久久9蜜桃| 国产精品网址在线观看你懂的 | 亚洲视频在线精品| 亚洲国产成人精品女人久久久 | 亚洲精品无码久久毛片| 亚洲国产精品综合久久一线|