• <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
    主站蜘蛛池模板: 久久久久99精品成人片试看| 国产偷亚洲偷欧美偷精品| 99精品视频在线观看免费| 久久久精品国产亚洲成人满18免费网站 | 国产精品久久久久乳精品爆 | 人人妻人人澡人人爽精品日本 | 国产三级精品三级在专区| 动漫精品专区一区二区三区不卡| 无码精品人妻一区二区三区免费看 | 欧美精品亚洲精品日韩专区| 在线人成精品免费视频| 老司机67194精品线观看| 亚洲精品视频在线观看你懂的| 免费观看四虎精品成人 | 国产一区二区精品尤物| 91精品国产福利在线观看| 精品无人区麻豆乱码1区2区| 国产精品伦一区二区三级视频| 欧美精品中文字幕亚洲专区| 日韩人妻无码精品久久免费一| 中文成人无字幕乱码精品区| 亚洲&#228;v永久无码精品天堂久久 | 久久亚洲中文字幕精品一区| 国产高清日韩精品欧美激情| 91精品无码久久久久久五月天| 99精品高清视频一区二区| 91精品美女在线| 99久久人妻无码精品系列| 国产欧美日韩精品丝袜高跟鞋 | 永久无码精品三区在线4| 亚洲А∨精品天堂在线| 欧美久久久久久午夜精品| 欧美精品VIDEOSEX极品| 久久国产香蕉一区精品| 久久久久人妻一区精品| 日本精品自产拍在线观看中文 | 日韩蜜芽精品视频在线观看| 日韩精品欧美激情国产一区| 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛 | 国产精品美女久久久久久2018| 精品视频无码一区二区三区|