日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 辦公軟件教程 > 詳細頁面

mssql access top分頁辦法

mssql access top分頁辦法

更新時間:2022-05-09 文章作者:未知 信息來源:網絡 閱讀次數:

Microsoft Office Access是由微軟發布的關系數據庫管理系統。它結合了 MicrosoftJet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統程序之一。Microsoft Office Access是微軟把數據庫引擎的圖形用戶界面和軟件開發工具結合在一起的一個數據庫管理系統。它是微軟OFFICE的一個成員, 在包括專業版和更高版本的office版本里面被單獨出售。2018年9月25日,最新的微軟Office Access 2019在微軟Office 2019里發布。

 mssql access top分頁方法

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

using system;
using system.collections.generic;
using system.text;

/// <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 = _orderfield.split(new char[] { ',' }, stringsplitoptions.removeemptyentries);
        stringbuilder sboriginalorder = new stringbuilder(); //原排序字段
        stringbuilder sbreverseo教程rder = new stringbuilder(); //與原排序字段相反,用于分頁
        for (int i = 0; i < arrstrorders.length; i++)
        {
            arrstrorders[i] = arrstrorders[i].trim();  //去除前后空格
            if (i != 0)
            {
                sboriginalorder.append(", ");
                sbreverseorder.append(", ");
            }
            sboriginalorder.append(arrstrorders[i]);

            int index = arrstrorders[i].indexof(" "); //判斷是否有升降標識
            if (index > 0)
            {
                //替換升降標識,分頁所需
                bool flag = arrstrorders[i].indexof(" desc", stringcomparison.ordinalignorecase) != -1;
                sbreverseorder.appendformat("{0} {1}", arrstrorders[i].remove(index), flag ? "asc" : "desc");
            }
            else
            {
                sbreverseorder.appendformat("{0} desc", arrstrorders[i]);
            }
        }

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

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

        stringbuilder sbsql = new stringbuilder();
        //第一頁時,直接使用top n,而不進行分頁查詢
        if (_pageindex == 1)
        {
            sbsql.appendformat(" select top {0} * ", _pagesize);
            sbsql.appendformat(" from ({0}) as t ", _safesql);
            sbsql.appendformat(" order by {0} ", sboriginalorder.tostring());
        }
        //最后一頁時,減少一個top n 
        else if (_pageindex == pagecount)
        {
            sbsql.append(" select * from ");
            sbsql.append(" ( ");
            sbsql.appendformat(" select top {0} * ", _recordcount - _pagesize * (_pageindex - 1));
            sbsql.appendformat(" from ({0}) as t ", _safesql);
            sbsql.appendformat(" order by {0} ", sbreverseorder.tostring());
            sbsql.append(" ) as t ");
            sbsql.appendformat(" order by {0} ", sboriginalorder.tostring());
        }
        //前半頁數時的分頁
        else if (_pageindex < (pagecount / 2 + pagecount % 2))
        {
            sbsql.append(" select * from ");
            sbsql.append(" ( ");
            sbsql.appendformat(" select top {0} * from ", _pagesize);
            sbsql.append(" ( ");
            sbsql.appendformat(" select top {0} * ", _pagesize * _pageindex);
            sbsql.appendformat(" from ({0}) as t ", _safesql);
            sbsql.appendformat(" order by {0} ", sboriginalorder.tostring());
            sbsql.append(" ) as t ");
            sbsql.appendformat(" order by {0} ", sbreverseorder.tostring());
            sbsql.append(" ) as t ");
            sbsql.appendformat(" order by {0} ", sboriginalorder.tostring());
        }
        //后半頁數時的分頁
        else
        {
            sbsql.appendformat(" select top {0} * from ", _pagesize);
            sbsql.append(" ( ");
            sbsql.appendformat(" select top {0} * ", ((_recordcount % _pagesize) + _pagesize * (pagecount - _pageindex)));
            sbsql.appendformat(" from ({0}) as t ", _safesql);
            sbsql.appendformat(" order by {0} ", sbreverseorder.tostring());
            sbsql.append(" ) as t ");
            sbsql.appendformat(" order by {0} ", sboriginalorder.tostring());
        }

        return sbsql.tostring();
    }

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

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


Microsoft Access在很多地方得到廣泛使用,例如小型企業,大公司的部門。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

主站蜘蛛池模板: 99国产牛牛视频在线网站 | 国产精品欧美韩国日本久久 | 欧美国产精品日韩在线 | 欧美久久综合网 | 日日射日日干 | 亚洲精品久久久久影 | 欧美日韩精品一区二区三区 | 国产精品欧美日韩一区二区 | 激情影院在线 | 天天爱天天操天天射 | 天堂中文资源网 | 日韩在线观看一区二区不卡视频 | 狠狠色噜噜狠狠狠狠97老肥女 | 国产精品欧美一区二区三区 | 久久影视免费观看网址 | xxxxwww一片| 亚洲成a v人片在线观看 | 午夜性视频播放免费视频 | 免费在线视频日本 | 欧美成人se01短视频在线看 | 亚洲日本va中文字幕在线不卡 | 美国毛片一级e片黑人片 | 亚洲国产99| 亚洲精品一区二区三区在线看 | 97天天摸天天碰天天爽 | 国产极品福利视频在线观看 | 日本久久久久久久中文字幕 | 99视频在线精品 | 天天综合天天做 | 欧美亚洲国产成人综合在线 | 日韩免费一区二区 | 手机看片一区二区 | 欧美性视频在线播放黑人 | 国产福利视频一区美女 | 国产精品视频国产永久视频 | 免费一级欧美性大片 | 全网毛片| 国产成人微拍精品 | 青青青国产精品视频 | 成人在线色视频 | 久草国产精品视频 |