<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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的通用類

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

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

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

        如果的單一字段排序分頁,現在有很多的存儲過程和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函數,我們就不能從這里下手了,比如你取第二頁,那就是序號從10-20,我們先按照某一排序規則 把 前 20條的數據取出來,然后再按照先前的排序規則的反規則把這個數據反排序,再取前10條,那么這個時候就是要取的數據了,這個時候還沒有結束,再把結果按照先前的排序規則排序即可。我覺得效率瓶頸會出現在排序上。看看是怎么來使用的:

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

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

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

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲一区无码精品色| 亚洲AV无码第一区二区三区| 久久久久亚洲精品无码网址色欲| 精品久久免费视频| 一级做a爰性色毛片免费| 日韩亚洲欧洲在线com91tv| 最近免费mv在线电影| 亚洲综合无码无在线观看| 成人免费无码精品国产电影| 香蕉免费一级视频在线观看| 4480yy私人影院亚洲| 国产美女被遭强高潮免费网站| 久99久无码精品视频免费播放| 亚洲人成依人成综合网| 午夜视频免费成人| 成人免费无码H在线观看不卡| 亚洲黄色网址大全| 免费人成网站在线播放| 久久狠狠躁免费观看| 亚洲第一街区偷拍街拍| 亚洲午夜未满十八勿入网站2| 免费在线观看视频网站| 免费国产黄网站在线看| 久久亚洲AV无码精品色午夜| 免费一级一片一毛片| 毛片无码免费无码播放| 黄人成a动漫片免费网站| 日韩精品亚洲人成在线观看| 日韩视频在线免费观看| 色欲国产麻豆一精品一AV一免费| 亚洲av永久无码精品秋霞电影秋| 国产亚洲人成无码网在线观看| 嫩草影院在线免费观看| 无码av免费网站| 爱情岛论坛免费视频| 亚洲一区二区三区四区视频| 中国亚洲女人69内射少妇| 嫩草影院在线免费观看| 中文字幕免费视频一| 久久国产精品免费一区| 亚洲AV无码专区在线观看成人|