多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > access > mssql access top分頁方法

mssql access top分頁方法

來源:程序員人生   發布時間:2014-05-05 16:04:53 閱讀次數:2797次

  mssql access top分頁方法

  雙top法相比于not in和max法就是可以傳入一條sql語句來生成分頁sql語句也可多字段排序
但是有利也有弊它要求排序字段必須構成唯一記錄且select后的字段列表中不允許出現與排序字段同名的字段
雖然sqlk及以上版本已經提供了rownum()來進行分頁處理但是使用sqlk進行開發的還是較多的

  using system;
using systemcollectionsgeneric;
using systemtext;

  /// <summary>
/// 構造分頁后的sql語句
/// </summary>
public static class paginghelper
{
    /// <summary>
    /// 獲取分頁sql語句排序字段需要構成唯一記錄
    /// </summary>
    /// <param name="_recordcount">記錄總數</param>
    /// <param name="_pagesize">每頁記錄數</param>
    /// <param name="_pageindex">當前頁數</param>
    /// <param name="_safesql">sql查詢語句</param>
    /// <param name="_orderfield">排序字段多個則用“”隔開</param>
    /// <returns>分頁sql語句</returns>
    public static string createpagingsql(int _recordcount int _pagesize int _pageindex string _safesql string _orderfield)
    {
        //重新組合排序字段防止有錯誤
        string[] arrstrorders = _orderfieldsplit(new char[] { } stringsplitoptionsremoveemptyentries);
        stringbuilder sboriginalorder = new stringbuilder(); //原排序字段
        stringbuilder sbreverseo教程rder = new stringbuilder(); //與原排序字段相反用于分頁
        for (int i = ; i < arrstrorderslength; i++)
        {
            arrstrorders[i] = arrstrorders[i]trim();  //去除前后空格
            if (i != )
            {
                sboriginalorderappend(" ");
                sbreverseorderappend(" ");
            }
            sboriginalorderappend(arrstrorders[i]);

  int index = arrstrorders[i]indexof(" "); //判斷是否有升降標識
            if (index > )
            {
                //替換升降標識分頁所需
                bool flag = arrstrorders[i]indexof(" desc" stringcomparisonordinalignorecase) != ;
                sbreverseorderappendformat("{} {}" arrstrorders[i]remove(index) flag ? "asc" : "desc");
            }
            else
            {
                sbreverseorderappendformat("{} desc" arrstrorders[i]);
            }
        }

  //計算總頁數
        _pagesize = _pagesize == ? _recordcount : _pagesize;
        int pagecount = (_recordcount + _pagesize ) / _pagesize;

  //檢查當前頁數
        if (_pageindex < )
        {
            _pageindex = ;
        }
        else if (_pageindex > pagecount)
        {
            _pageindex = pagecount;
        }

  stringbuilder sbsql = new stringbuilder();
        //第一頁時直接使用top n而不進行分頁查詢
        if (_pageindex == )
        {
            sbsqlappendformat(" select top {} * " _pagesize);
            sbsqlappendformat(" from ({}) as t " _safesql);
            sbsqlappendformat(" order by {} " sboriginalordertostring());
        }
        //最后一頁時減少一個top n 
        else if (_pageindex == pagecount)
        {
            sbsqlappend(" select * from ");
            sbsqlappend(" ( ");
            sbsqlappendformat(" select top {} * " _recordcount _pagesize * (_pageindex ));
            sbsqlappendformat(" from ({}) as t " _safesql);
            sbsqlappendformat(" order by {} " sbreverseordertostring());
            sbsqlappend(" ) as t ");
            sbsqlappendformat(" order by {} " sboriginalordertostring());
        }
        //前半頁數時的分頁
        else if (_pageindex < (pagecount / + pagecount % ))
        {
            sbsqlappend(" select * from ");
            sbsqlappend(" ( ");
            sbsqlappendformat(" select top {} * from " _pagesize);
            sbsqlappend(" ( ");
            sbsqlappendformat(" select top {} * " _pagesize * _pageindex);
            sbsqlappendformat(" from ({}) as t " _safesql);
            sbsqlappendformat(" order by {} " sboriginalordertostring());
            sbsqlappend(" ) as t ");
            sbsqlappendformat(" order by {} " sbreverseordertostring());
            sbsqlappend(" ) as t ");
            sbsqlappendformat(" order by {} " sboriginalordertostring());
        }
        //后半頁數時的分頁
        else
        {
            sbsqlappendformat(" select top {} * from " _pagesize);
            sbsqlappend(" ( ");
            sbsqlappendformat(" select top {} * " ((_recordcount % _pagesize) + _pagesize * (pagecount _pageindex)));
            sbsqlappendformat(" from ({}) as t " _safesql);
            sbsqlappendformat(" order by {} " sbreverseordertostring());
            sbsqlappend(" ) as t ");
            sbsqlappendformat(" order by {} " sboriginalordertostring());
        }

  return sbsqltostring();
    }

  /// <summary>
    /// 獲取記錄總數sql語句
    /// </summary>
    /// <param name="_n">限定記錄數</param>
    /// <param name="_safesql">sql查詢語句</param>
    /// <returns>記錄總數sql語句</returns>
    public static string createtopnsql(int _n string _safesql)
    {
        return stringformat(" select top {} * from ({}) as t " _n _safesql);
    }

  /// <summary>
    /// 獲取記錄總數sql語句
    /// </summary>
    /// <param name="_safesql">sql查詢語句</param>
    /// <returns>記錄總數sql語句</returns>
    public static string createcountingsql(string _safesql)
    {
        return stringformat(" select count() as recordcount from ({}) as t " _safesql);
    }
}

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 性做久久久久久 | 性欧美free | 国产最新一区二区三区天堂 | 日本一级毛片在线观看 | 国产福利一区二区在线观看 | 亚洲天天看 | 日韩专区亚洲精品欧美专区 | 欧美一级片免费看 | 亚洲欧美日韩第一页 | 手机看片福利视频 | 久久久影院亚洲精品 | 最近中文字幕2019高清免费 | 18到20女人一级毛片 | 国产精品亚欧美一区二区三区 | 中文字幕久久久久一区 | 成年人在线观看视频网站 | 羞羞动漫在线免费观看 | 最近中文字幕免费mv视频8 | 国产精品亚洲欧美日韩一区在线 | 久久 精品 一区二区 | 波多野结中文字幕在线69视频 | 日本久操 | 国产一区二区在线视频观看 | 欧美高清videos性极品 | 最新国产在线播放 | 成人欧美一区二区三区小说 | 亚洲欧洲高清 | 成人特级毛片 | 另类专区国产在线视频 | 国产最新进精品视频 | 久久爱18| 美女网站在线观看视频免费的 | 韩国v欧美v亚洲v日本v | 亚洲淫片| 久久综合欧美 | 亚洲成人福利网站 | 亚洲国产精品久久日 | 午夜免费福利在线 | 成人久久精品 | 小说区 综合区 首页 | 夜夜精品视频一区二区 |