• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答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
    問(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)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:45:18
    文檔

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

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

    如果的單一字段排序分頁(yè),現(xiàn)在有很多的存儲(chǔ)過(guò)程和SQL語(yǔ)句,分頁(yè)的時(shí)候,只取pageSize的記錄,可遇見的問(wèn)題是:
    這個(gè)單一字段必須是唯一的
    這個(gè)字段必須是可以被排序的
    不支持多字段排序
    針對(duì)這一問(wèn)題,我用C#做了一個(gè)類,解決以上的對(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="";//用戶期望的排序 
                string orderList2 = "";//對(duì)用戶期望的排序的反排序 
                string orderList3 = "";//用戶期望的排序,去掉了前綴.復(fù)合查詢里的外層的排序不能是類似這樣的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"; 
                        //去掉前綴的字段名稱 
                        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è)類,沒(méi)有做成存儲(chǔ)過(guò)程,要做的話,還有一點(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的通用類

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品无码综合一区| 真实国产乱子伦精品视频| 久久精品国产一区二区三区不卡| 69久久精品无码一区二区| 亚洲精品网站在线观看不卡无广告| 日本人精品video黑人| 人妻AV一区二区三区精品| 日韩一区二区三区在线精品| 中文字幕亚洲精品| 国内精品免费在线观看| 99爱在线精品免费观看| 日韩精品无码久久久久久 | 91麻豆精品国产91久久久久久 | 国产午夜无码精品免费看| 亚洲国产精品综合久久网络| 久久精品无码av| 久久久久国产日韩精品网站| 国产精品人人做人人爽| 国产A∨免费精品视频| 色综合久久精品中文字幕首页| 久久99热国产这有精品| 精品一区二区三区免费 | 国产精品视频第一页| 青青青青久久精品国产| 久久久久夜夜夜精品国产| 久久国产精品-久久精品| 华人亚洲欧美精品国产| 国产精品久久久久久影院| 国产精品99久久久久久人| 国产精品视频免费观看| 四虎影视国产精品永久在线| 国产精品视频久久| 亚洲av无码乱码国产精品| 亚洲精品专区在线观看| 伊人久久无码精品中文字幕| 伊人久久精品无码av一区| 亚洲av无码乱码国产精品 | 国产精品片在线观看手机版| 国产免费久久精品丫丫| 精品国产欧美一区二区三区成人| 黑人巨茎精品欧美一区二区|