精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

證明DataReader分頁的可行性

運維 數據庫運維
記得那是07年的一個下午,我正在網上瞎逛,突然看到一段代碼,也就是跟樓主上面的代碼類似的,通過DataReader來分頁的代碼。當時我嚇了一跳,這樣的代碼,是不是稍大些的系統就不能用了呢?

記得那是07年的一個下午,我正在網上瞎逛,突然看到一段代碼,也就是跟樓主上面的代碼類似的,通過DataReader來分頁的代碼。當時我嚇了一跳,這樣的代碼,是不是稍大些的系統就不能用了呢?因為按我當時的理解,while (dr.Read()),若我的系統有幾百萬條的數據,那這個while也要轉好久了,還要傳數據,應該快不了的。可是后來經過我的測試,其實性能是很好的,至少不是我們想像中的那么慢的。

在那時候,我用我們系統里面的一個200多W的統計表進行了測試,只是簡單的select * from table ,然后在程序里面 while 遍歷,最后在GridView上面綁定了一下,效果很好。我記憶深刻,那會白天,在公司里面,前面幾頁運行良好,后面的頁碼,當然也包括最后一頁,我都不敢去點,怕影響系統性能。等到了晚上回家,我半夜試了一下,居然跟前面幾頁差距不大,我那時候只是為了測試一下是否可行,也沒有使用記時器,但是應該也是在5秒以內就返回了。前面的話,應該也是3,4秒的樣子。太讓我意外了,同時也太驚喜了。

不過因為系統框架里面都是使用的存儲過程,也運行良好,也就一直沒有去改過。也就是說,這套分頁解決方案,在真正的大數據量下面,我也沒有實際在項目中應用過,不過小項目倒是常用。

對于一般的系統來說,這個通用的分頁解決方案就夠用了。對于大一點的,可以通過其它手段,如分表或其它什么的,也能滿足一般的應用。

想想發到首頁,應該出點代碼,就又花了些時間補充了一下。

下面是我的測試代碼:

頁面:簡單的。

  1.     <asp:GridView ID="GridView1" runat="server"> 
  2.     </asp:GridView> 
  3.      
  4. <lcs:Pager ID="Pager1" runat="server" onpagechanged="Pager1_PageChanged" AlwaysShow="true" 
  5.     CurrentPageButtonPosition="Center"> 
  6. </lcs:Pager>  

后臺代碼:也是簡單的。

  1. private void BindRpt()  
  2. {  
  3.    int totalCount;  
  4.    double beg = DateTime.Now.Ticks;  
  5.    if (isDatareader)  
  6.    {  
  7.       GridView1.DataSource = LCS.Data.DbHelper.GetPager(  
  8.          Pager1.PageSize, Pager1.CurrentPageIndex, "Statistic", "*", "StatisticID", false, out totalCount, null, null); ;  
  9.    }  
  10.    else  
  11.    {  
  12.       totalCount = LCS.Data.DbHelper.GetCount("Statistic", "");  
  13.       GridView1.DataSource = LCS.Data.DbHelper.GetPager(  
  14.          Pager1.PageSize, Pager1.CurrentPageIndex, "Statistic", "*", "StatisticID", false, null);  
  15.    }  
  16.    Response.Write("<hr/>" + (DateTime.Now.Ticks - beg)+ "<hr/>");  
  17.     
  18.    GridView1.DataBind();  
  19.    Pager1.RecordCount = totalCount;  
  20. }  

最后再附上我的DbHelper里面的方法實現:

先看使用datareader的

  1. public static DataTable GetPager(int pageSize, int pageIndex,  
  2.    string tblName, string fldName, string fldSort, bool isDesc,  
  3.    out int totalCount, string condition, params object[] parmsValues  
  4.    )  
  5. {  
  6.    //select * from talble where 11=1 order by fld desc  
  7.    //是標準的sql,不需要單獨區分  
  8.    string sql = "select " + fldName + " from " + tblName.ToString()  
  9.       + ((string.IsNullOrEmpty(condition)) ? string.Empty : (" where 11=1 " + condition))  
  10.       + " order by " + fldSort.ToString() + (isDesc ? " DESC" : " ASC");  
  11.    using (DbDataReader reader = ExecuteReader(sql, parmsValues))  
  12.    {  
  13.       DataTable dt = new DataTable();  
  14.       int fieldCount = reader.FieldCount;  
  15.       for (int i = 0; i < fieldCount; i++)  
  16.       {  
  17.          DataColumn col = new DataColumn();  
  18.          col.ColumnName = reader.GetName(i);  
  19.          col.DataType = reader.GetFieldType(i);  
  20.          dt.Columns.Add(col);  
  21.       }  
  22.       totalCount = 0;  
  23.       int first = (pageIndex - 1) * pageSize + 1;  
  24.       int last = pageIndex * pageSize;  
  25.       while (reader.Read())  
  26.       {  
  27.          totalCount++;  
  28.          if (totalCount >= first && last >= totalCount)  
  29.          {  
  30.             DataRow r = dt.NewRow();  
  31.             for (int i = 0; i < fieldCount; i++)  
  32.             {  
  33.                r[i] = reader[i];  
  34.             }  
  35.             dt.Rows.Add(r);  
  36.          }  
  37.       }  
  38.       return dt;  
  39.    }  

再看常規的:

  1. public static DbDataReader GetPager(int pageSize, int pageIndex,  
  2. string tblName, string fldName, string fldSort, bool isDesc, string condition)  
  3. {  
  4.    return ExecuteReader(Provider.GetPagerSql(pageSize, pageIndex, tblName, fldName, fldSort, isDesc, condition));  
  5. }   
  6.  
  7. //我內部使用了一個格式化sql字符串參數的過程,所以這里有個中轉。  
  8.  
  9. public static DbDataReader ExecuteReader(string format, params object[] parameterValues)  
  10. {  
  11.    if (format == null || format.Length == 0) throw new ArgumentNullException("commandText");  
  12.    if ((parameterValues != null) && (parameterValues.Length > 0))  
  13.    {  
  14.       //當存在參數時,格式化參數  
  15.       SQlParameterFormatter formatter = new SQlParameterFormatter();  
  16.       formatter.Provider = Provider;  
  17.       formatter.Format(format, parameterValues);  
  18.       return ExecuteReader(CommandType.Text, formatter.Sql, formatter.Parameters);  
  19.    }  
  20.    else//無參數時直接掉用  
  21.    {  
  22.       return ExecuteReader(CommandType.Text, format, (DbParameter[])null);  
  23.    }  
  24. }    

//最后再看一下生成分頁sql字符串的方法

  1. public string GetPagerSql( int pageSize, int pageIndex,  
  2. string tblName,string fldName,string fldSort, bool isDesc,string condition)  
  3. {  
  4.    string strSort = isDesc ? " DESC" : " ASC";  
  5.    if (pageIndex == 1)  
  6.    {  
  7.       return "select top " + pageSize.ToString() + " " + fldName + " from " + tblName.ToString()  
  8.       + ((string.IsNullOrEmpty(condition)) ? string.Empty : (" where " + condition))  
  9.       + " order by " + fldSort.ToString() + strSort;  
  10.    }  
  11.    else  
  12.    {  
  13.       System.Text.StringBuilder strSql = new System.Text.StringBuilder();  
  14.       strSql.AppendFormat("select top {0} {1} from {2} ", pageSize,fldName, tblName);  
  15.       strSql.AppendFormat(" where {1} not in (select top {0} {1} from {2} ", pageSize * (pageIndex - 1),  
  16.       (fldSort.Substring(fldSort.LastIndexOf(',') + 1, fldSort.Length - fldSort.LastIndexOf(',') - 1)), tblName);  
  17.       if (!string.IsNullOrEmpty(condition))  
  18.       {  
  19.          strSql.AppendFormat(" where {0} order by {1}{2}) and {0}", condition, fldSort, strSort);  
  20.       }  
  21.       else  
  22.       {  
  23.          strSql.AppendFormat(" order by {0}{1}) ", fldSort, strSort);  
  24.       }  
  25.       strSql.AppendFormat(" order by {0}{1}", fldSort, strSort);  
  26.       return strSql.ToString();  
  27.    }  

最后,給想直接看結果的一個連接:http://jyt.dai8.net:89/test_cb.aspx

可別把我的電腦給搞死啦。

經過我的測試,常規的還是比datareader的要來得快,若單是從數值上面看的話,差距還蠻大的,大的差10多倍,小的也要差3,4倍 ,不過對于實用性來說,也是夠用啦。因為很多時候,用戶是感覺不到的,特別是那些客戶端的,或是企業內部使用的,基本上沒有并發的項目。

原文鏈接:http://www.cnblogs.com/luchaoshuai/archive/2011/04/27/2029937.html

【編輯推薦】

  1. 詳解數據庫分頁操作
  2. sql server存儲過程分頁總結
  3. 雙TOP二分法生成分頁SQL類
  4. 淺談SQL Server2005的幾種分頁方法
  5. Access分頁方案
責任編輯:艾婧 來源: 博客園
相關推薦

2012-04-12 17:41:02

2009-09-21 16:40:42

Hibernate可行

2011-06-24 11:35:01

內鏈

2009-12-25 14:26:40

無線接入技術集成

2009-02-17 15:59:55

2011-12-13 20:36:26

Android

2009-06-15 09:57:46

HibernateIBatis

2013-08-27 11:15:20

2012-10-26 13:48:54

云計算運維云安全

2011-11-14 09:10:08

虛擬化

2020-09-16 09:19:49

數據中心

2012-04-09 09:39:59

虛擬化桌面虛擬化VDI終端

2022-03-11 08:31:50

API網關微服務

2011-08-17 13:07:19

無線局域網

2011-12-02 09:25:46

2019-10-21 17:17:48

Windows操作系統微軟

2011-07-05 14:12:06

關鍵任務虛擬化服務器

2011-07-05 10:37:03

虛擬化VMware

2023-08-20 12:34:53

2020-09-28 07:00:00

單元測試編程語言
點贊
收藏

51CTO技術棧公眾號

www.欧美| 欧美日韩在线观看成人| 国产探花视频在线观看| 韩国欧美一区二区| 久久久久久久爱| 在线观看日本www| www在线视频| 成人丝袜高跟foot| 国产91在线播放精品91| 在线观看日本中文字幕| 男女羞羞在线观看| 国产精品视频一二三| 国产精自产拍久久久久久| 日本黄色小说视频| 美女久久久久| 欧美性大战久久久久久久蜜臀| 日本欧美精品久久久| 国产福利资源在线| 噜噜噜躁狠狠躁狠狠精品视频| 色偷偷av亚洲男人的天堂| 91 视频免费观看| 91老司机福利在线| 亚洲色图制服诱惑| 欧美尤物一区| www.黄色小说.com| 日本成人在线不卡视频| 性亚洲最疯狂xxxx高清| 日本午夜在线观看| 国产一区二区三区天码| 欧美va亚洲va国产综合| 天天综合网久久| 欧美momandson| 一区二区三区高清| 亚洲综合五月天| 性猛交xxxx| 丁香天五香天堂综合| 奇米四色中文综合久久| 五月天婷婷网站| 亚洲成av人电影| 亚洲激情 国产| 白丝校花扒腿让我c| 欧美成人毛片| 在线视频欧美精品| 久青草视频在线播放| 999在线视频| www久久精品| 国产在线精品日韩| 韩国中文字幕hd久久精品| 精品一区二区国语对白| 国产情人节一区| 91video| 国产精品x8x8一区二区| 欧美一区二区播放| 涩涩网站在线看| 97久久中文字幕| 欧美日韩国产精品成人| 亚洲欧美日韩一级| 99久久er| 欧美日本国产视频| 亚洲老女人av| 成人免费视频观看| 欧美日韩国产经典色站一区二区三区| 人妻熟女一二三区夜夜爱| 麻豆免费在线| 亚洲成人资源网| 久草热视频在线观看| 黄色成人在线网| 一区二区三区视频在线看| 国产一二三四区在线观看| а√中文在线8| 亚洲高清一区二区三区| 无码中文字幕色专区| 丝袜老师在线| 黑人巨大精品欧美一区二区三区 | 免费看a级黄色片| 一区二区乱码| 色婷婷香蕉在线一区二区| caoporn超碰97| 日韩av懂色| 欧美一区二区视频网站| 丰满少妇一区二区三区专区| 草莓视频一区二区三区| 亚洲男人av在线| 国产美女精品久久| 亚洲香蕉视频| 自拍偷拍亚洲一区| 国产午夜精品理论片| 精品白丝av| 青青久久av北条麻妃黑人| 依依成人综合网| 久久成人av少妇免费| 动漫精品视频| 狠狠v欧美ⅴ日韩v亚洲v大胸| 国产午夜精品一区二区三区四区| 牛人盗摄一区二区三区视频| 午夜免费福利在线观看| 专区另类欧美日韩| 成人免费观看在线| 成人免费短视频| 欧美日韩专区在线| 中国男女全黄大片| 天天躁日日躁狠狠躁欧美| 亚洲午夜av久久乱码| 欧美xxxx黑人xyx性爽| 国产麻豆综合| 91在线观看免费网站| 日韩a在线看| 亚洲天堂免费在线观看视频| 亚洲熟妇无码一区二区三区| sis001亚洲原创区| 欧美精品乱码久久久久久按摩| 手机看片国产精品| 成人女性视频| 欧美性受xxxx黑人猛交| 国产精品女人久久久| www..com久久爱| 六月婷婷激情网| 日本а中文在线天堂| 7777精品伊人久久久大香线蕉完整版| 中文字幕a在线观看| 亚洲国产精品日韩专区av有中文| 亲子乱一区二区三区电影| www.桃色av嫩草.com| 久久色中文字幕| 色视频一区二区三区| 国产在线精彩视频| 欧美电影一区二区三区| 夜夜春很很躁夜夜躁| 亚州av乱码久久精品蜜桃| 国产成人在线一区| 色wwwwww| 亚洲国产欧美在线| 中文字幕中文在线| 亚洲国产最新| 55夜色66夜色国产精品视频| 国产一区二区三区四区视频| 久久久久久久久久看片| 成年人视频观看| 国产精品乱战久久久| 欧美巨乳美女视频| 国产尤物视频在线观看| 国产精品久久久久久久久晋中 | 亚洲第一在线视频| 久久久www成人免费毛片| 久久精品国产亚洲一区二区三区| 美女主播视频一区| 26uuu亚洲电影在线观看| 欧美影院一区二区| 中文字幕乱码在线| 久久精品国产视频| 成人午夜精品视频| 99视频一区二区| 99久久免费观看| 日本一区精品视频| 亚洲欧美日本精品| 一本一道无码中文字幕精品热| 99久久婷婷国产| 日韩欧美视频网站| 亚洲制服欧美另类| 国产精品pans私拍| 成人不用播放器| 欧美日韩免费高清一区色橹橹| 欧美激情亚洲色图| 久久99国产精品麻豆| 在线观看免费黄色片| 91精品店在线| 久久色在线播放| 国模私拍一区二区| 国产精品不卡在线观看| 中文字幕 欧美日韩| av永久不卡| 91欧美精品成人综合在线观看| 怡红院av在线| 亚洲精品久久久久中文字幕二区 | 国产精品嫩草影院在线看| 啪一啪鲁一鲁2019在线视频| 番号集在线观看| 7777精品久久久大香线蕉| 99热精品免费| 91视频观看免费| 波多结衣在线观看| 欧美在线首页| 狠狠色狠狠色综合人人| av综合电影网站| 国产亚洲欧美日韩一区二区| 国产女人爽到高潮a毛片| 国产精品久久久久天堂| 91精品人妻一区二区三区四区| 99精品国产福利在线观看免费| 久久艹中文字幕| 日本一区二区中文字幕| 97精品国产97久久久久久免费| 色婷婷在线视频| 欧美日韩一区二区三区高清| 欧美日韩中文字幕在线观看| 久久综合中文字幕| 91丨porny丨九色| 男女精品视频| 致1999电视剧免费观看策驰影院| 9l亚洲国产成人精品一区二三| 97在线观看视频国产| 在线看黄色av| 亚洲精品美女久久| 波多野结衣高清视频| 亚洲综合一二区| 欧产日产国产精品98| 久草热8精品视频在线观看| 国产伦精品一区二区三区四区视频_| 国产一区二区观看| 国产视频99| 99er精品视频| 国产精品高清网站| 国产黄大片在线观看| 色噜噜狠狠色综合网图区 | 国产精品.xx视频.xxtv| 韩国日本不卡在线| 91亚洲天堂| 视频在线观看一区二区| 日本黄色三级视频| 日韩午夜精品电影| 一区二区视频网站| 91国偷自产一区二区三区观看 | 激情偷拍久久| 国产精品一国产精品最新章节| 国产成人毛片| 日本一区二区三区在线播放| 日本高清中文字幕在线| 亚洲日韩中文字幕| 日韩一级片免费在线观看| 91国产免费观看| 久久午夜免费视频| 亚洲福利一二三区| 欧美激情国产精品免费| 日韩久久一区二区| 神马久久久久久久久久久| 91麻豆国产福利精品| 免费看黄色片的网站| 国产酒店精品激情| 亚洲综合123| 久久国内精品自在自线400部| 日本黄网站免费| 欧美专区一区二区三区| www精品久久| 亚洲无线一线二线三线区别av| 伊人天天久久大香线蕉av色| 菠萝蜜一区二区| 欧美视频1区| 国产99精品| 日本午夜精品一区二区三区| 天堂99x99es久久精品免费| 精品午夜一区二区| 亚洲免费福利一区| 久久狠狠久久综合桃花| 伊人精品综合| 国产日韩亚洲精品| 日本午夜精品久久久| 麻豆av一区二区三区| 曰本一区二区三区视频| 日本a级片久久久| 日韩久久综合| 一区二区三区欧美成人| 色综合咪咪久久网| 中文字幕一区二区三区有限公司 | 99亚洲乱人伦aⅴ精品| 国产精品久久久久久久久婷婷| 亚洲精品黑牛一区二区三区| 国产精品精品软件视频| 久久资源综合| 极品日韩久久| 国产亚洲一卡2卡3卡4卡新区| 亚洲一卡二卡| 欧美精品日本| 中国丰满人妻videoshd| 羞羞视频在线观看欧美| 亚洲第一中文av| 国产乱码精品一区二区三| 日本人添下边视频免费| 久久久五月婷婷| 欧美色视频一区二区三区在线观看| 亚洲欧美福利一区二区| 成人在线观看高清| 婷婷久久综合九色综合绿巨人| 欧美brazzers| 91精品国产综合久久久蜜臀图片| 精品国产99久久久久久宅男i| 亚洲福利视频专区| 国产乱理伦片a级在线观看| 久久综合九色九九 | 国产精品久久久久久久9999| 日韩三级影视| 亚洲一区二区三区xxx视频| 极品一区美女高清| 日韩电影天堂视频一区二区| 亚洲一区在线| 那种视频在线观看| 国产伦精一区二区三区| 韩国无码一区二区三区精品| 国产精品色在线| 日韩免费视频一区二区视频在线观看| 欧美性色综合网| 在线观看免费中文字幕| 亚洲成av人片在线观看香蕉| 最新97超碰在线| 欧美精品在线免费观看| 欧美性猛交xxx高清大费中文| 亚洲在线视频福利| 精品视频97| 国产内射老熟女aaaa| 久久福利毛片| 亚洲欧美在线精品| 99精品国产99久久久久久白柏| 娇妻被老王脔到高潮失禁视频| 亚洲一区二区三区爽爽爽爽爽| 国产成人自拍偷拍| 亚洲第一网站免费视频| 韩国av网站在线| 国产精品成人在线| 欧美久久香蕉| mm131午夜| 理论电影国产精品| 欧美特级黄色录像| 亚洲第一激情av| 精品人妻一区二区三区含羞草| 亚洲欧洲午夜一线一品| h片在线观看视频免费免费| 亚洲一区二区三区久久| 欧美亚洲激情| 97成人在线观看视频| 高清国产一区二区三区| 亚洲一区 欧美| 91久久线看在观草草青青| 午夜黄色小视频| 久久久久亚洲精品国产| 亚洲va欧美va人人爽成人影院| 影音先锋在线亚洲| 美女网站视频久久| 国产人妻一区二区| 亚洲成av人**亚洲成av**| 亚洲AV无码国产精品午夜字幕 | 亚洲在线观看| 人妻av一区二区| 亚洲精品国产一区二区精华液 | 天堂影院一区二区| www.色多多| 日韩欧美在线国产| 水莓100国产免费av在线播放| 久久久噜噜噜久久| 国产乱论精品| 欧美不卡在线播放| aaa国产一区| av大片在线免费观看| 亚洲摸下面视频| 精品欧美一区二区三区在线观看| 欧美一区2区三区4区公司二百| 久久久成人网| av电影在线不卡| 欧美日韩精品免费| 国产福利视频在线| 91在线精品视频| 亚洲黄色精品| 亚洲一级中文字幕| 一本大道av一区二区在线播放| 国产在线观看黄| 国产一区欧美二区三区| 欧美综合久久| 亚洲国产午夜精品| 亚洲一卡二卡三卡四卡五卡| 99热精品在线播放| 久久久视频精品| 精品三级在线观看视频| www黄色日本| 欧美激情自拍偷拍| 国产精品亚洲lv粉色| 欧美激情一区二区三区高清视频| 男人的天堂久久| www.99av.com| 1024成人网色www| 欧日韩在线视频| 国产精品大陆在线观看| 亚洲综合激情在线| 亚洲自拍偷拍精品| 欧美在线综合视频| 在线中文字幕-区二区三区四区 | 国产一区三区在线播放| 欧美大片久久久| 图片区日韩欧美亚洲| 欧美自拍偷拍第一页| 国产精品极品尤物在线观看| 亚洲国产精品91| 黄色aaa视频| 欧美一级艳片视频免费观看| 色在线免费观看| 中文字幕中文字幕在线中心一区| 成人在线视频一区| 欧美一区二区三区久久久| 操91在线视频| 国产乱码精品一区二区亚洲| 女人高潮一级片| 欧美日韩国产色| 成人短视频在线|