精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

segui88久久综合9999| 日本一区二区三区久久| 欧美日韩破处视频| 亚洲精品中文字幕乱码三区| 91成人免费视频| 国产精品19乱码一区二区三区| 国产伦精品一区二区三区免费优势| 亚洲成人av资源| 欧美日韩另类丝袜其他| 国产又粗又猛又黄又爽无遮挡| 午夜精品剧场| 日韩电影中文字幕在线| 亚洲视频在线观看一区二区三区| 国产视频网站在线| 麻豆精品久久久| 欧美大片在线看| 成年人网站免费看| 亚洲成人高清| 天天色天天操综合| 日韩欧美第二区在线观看| 97人人爽人人爽人人爽| 亚洲免费大片| 精品国模在线视频| 日本护士做爰视频| 性欧美video另类hd尤物| 精品美女国产在线| 伊人色综合影院| 天天在线女人的天堂视频| 久久99国产乱子伦精品免费| 欧美一级大胆视频| 午夜免费激情视频| 精品欧美激情在线观看| 精品99一区二区三区| 国产一伦一伦一伦| 天堂中文最新版在线中文| 最新日韩av在线| 日韩国产在线一区| 五月天激情开心网| 国内国产精品久久| 国产精品99一区| 黄色片视频网站| 黄页网站一区| 欧美高跟鞋交xxxxxhd| www成人啪啪18软件| 亚洲色图丝袜| 日韩高清av一区二区三区| 亚洲欧美一区二区三区不卡| 福利精品一区| 欧美性猛交一区二区三区精品| 成熟丰满熟妇高潮xxxxx视频| 色婷婷在线播放| 综合av第一页| 特级西西444www大精品视频| 亚洲国产福利视频| 国产麻豆精品95视频| 国产精品一区专区欧美日韩| 国产精品777777| 国产欧美午夜| 91禁外国网站| 亚洲欧美在线观看视频| 日韩一级不卡| 欧美性受xxxx白人性爽| 青草影院在线观看| 欧美不卡一区| 久久久成人精品| 国产老头老太做爰视频| 天天射—综合中文网| 中文国产成人精品| 久久精品在线观看视频| 国产精品久久久久久麻豆一区软件 | 日韩视频免费大全中文字幕| 粉嫩精品久久99综合一区| 日韩在线第七页| 日韩在线视频导航| 性色av无码久久一区二区三区| 欧美a级在线| 欧美激情日韩图片| 日本一区二区网站| 国产午夜久久| 国产精品久久二区| 国产欧美久久久精品免费| 国产精品996| 精品人伦一区二区三区| 免费资源在线观看| 国产精品久久久久久户外露出 | 欧美午夜宅男影院| 亚洲精品综合在线观看| 亚洲一区二区三区四区电影| 日韩精品中文字幕在线| 日本一卡二卡在线播放| 亚洲精品a级片| 久久久女人电视剧免费播放下载| 国产精品久久久久久久久久久久久久久久久 | 国产精品爽黄69| av手机免费看| 久久午夜色播影院免费高清| 午夜欧美一区二区三区免费观看| 中文在线观看免费| 日韩欧美国产黄色| 国模大尺度视频| 亚洲区小说区| 久热99视频在线观看| 影音先锋亚洲天堂| 久久97超碰国产精品超碰| 国产精品青青草| a黄色在线观看| 亚洲一区欧美一区| 亚州精品一二三区| 黄色美女久久久| 日韩网站免费观看| 永久免费看片在线播放| 国产真实乱子伦精品视频| 久久精品美女| 国产一线二线在线观看| 欧美亚洲一区二区三区四区| 一边摸一边做爽的视频17国产| 精品视频免费| 午夜精品三级视频福利| 99精品免费观看| 国产亲近乱来精品视频| 老太脱裤让老头玩ⅹxxxx| 亚洲免费资源| 中文国产成人精品久久一| 成人精品免费在线观看| 国产成人av福利| 日韩av免费电影| 黄视频免费在线看| 日韩精品在线一区| 成人黄色短视频| 日韩精品一二三区| 精品国产免费人成电影在线观...| 麻豆视频网站在线观看| 粉嫩av一区二区三区免费野| 日本一级大毛片a一| 综合精品久久| 成人a在线观看| 日日夜夜精品一区| 欧美午夜精品理论片a级按摩| 亚洲狠狠婷婷综合久久久久图片| 一区二区视频欧美| 国产a一区二区| 欧美78videosex性欧美| 日韩一区二区在线看| 久久久久亚洲av片无码| 久久精品国产77777蜜臀| 日韩欧美视频一区二区三区四区 | 自拍欧美日韩| 亚洲最大福利网站| 日本在线视频www鲁啊鲁| 日韩精品中文字幕在线不卡尤物 | 午夜精品婷婷| 亚洲综合色av| 蜜臀av在线| 欧美va亚洲va| 国产91av视频| 99久久免费精品高清特色大片| 97超碰在线人人| 欧美午夜寂寞| 日韩免费在线播放| 成人性爱视频在线观看| 欧美三区在线观看| 四虎影视1304t| 激情偷乱视频一区二区三区| 法国空姐在线观看免费| 中文字幕一区二区三区中文字幕| 欧美激情一级精品国产| 日韩一区免费视频| 欧美性生交大片免网| 国产精品久久久久久久av| 久久精品国产一区二区三区免费看| 亚洲一区二区四区| 麻豆国产一区| 亚州成人av在线| 岛国在线视频| 884aa四虎影成人精品一区| 四虎永久免费在线| 成人福利视频在线| 91传媒久久久| 91欧美在线| 成人羞羞视频免费| 日韩福利一区| 蜜臀久久99精品久久久无需会员| 亚洲毛片在线播放| 欧美日韩国产综合新一区 | 午夜精品视频一区二区三区在线看| 亚洲一区二区三区成人在线视频精品| 色呦呦在线看| 国产一区二区三区在线免费观看| 国产老女人乱淫免费| 亚洲mv在线观看| 国产肥白大熟妇bbbb视频| 狠狠色狠狠色综合系列| 五十路熟女丰满大屁股| 久久国产精品亚洲人一区二区三区 | 久久久成人免费视频| 国产精品二三区| 日韩少妇一区二区| 蜜臀av国产精品久久久久| 午夜精品一区二区三区在线观看| 亚洲精品一二三**| 国产精品久久久久久久7电影| 成年人黄视频在线观看| 亚洲欧美国产视频| www国产一区| 欧美视频一二三区| 日韩乱码人妻无码中文字幕| 国产精品伦一区二区三级视频| 国产调教打屁股xxxx网站| 日韩国产欧美在线视频| 亚洲理论电影在线观看| 色小子综合网| 欧美裸体网站| 91精品久久久久久综合五月天| 国产精品精品国产| 性孕妇free特大另类| 久久亚洲成人精品| www.在线播放| 亚洲精品国精品久久99热一| 99精品免费观看| 在线观看免费视频综合| 国产情侣在线视频| 亚洲一区二区欧美日韩| 欧美风情第一页| 日本一二三不卡| 欧美成人午夜精品免费| 成人三级在线视频| 国内自拍第二页| 日韩电影免费在线观看网站| 国产v片免费观看| 国产一区二区三区四区三区四| 做爰高潮hd色即是空| 欧美三级美国一级| 欧美日韩亚洲综合一区二区三区激情在线 | 欧美日韩日日骚| 青青视频在线免费观看| 精品福利在线视频| 日韩精品人妻中文字幕| 亚洲午夜在线观看视频在线| www青青草原| 亚洲免费伊人电影| 丁香花五月激情| 亚洲精品国产第一综合99久久 | 成年人视频在线看| 国产一区二区欧美日韩| 久久视频www| 亚洲欧美国产日韩中文字幕| 青青草免费观看免费视频在线| 亚洲第一精品夜夜躁人人躁| 六月婷婷中文字幕| 亚洲第一天堂av| 亚洲av毛片成人精品| 日韩精品极品视频免费观看| 头脑特工队2在线播放| 亚洲欧美另类人妖| 成人午夜影视| 色婷婷成人综合| 日本高清中文字幕在线| 久久天堂av综合合色| 一二三四区在线观看| 欧美成人免费在线观看| 国产精品69xx| 欧美在线视频免费| 久久久成人av毛片免费观看| 国产乱肥老妇国产一区二| 欧美美女被草| 91文字幕巨乱亚洲香蕉| 第四色在线一区二区| 久久综合九九| 日本不卡高清| 日本女人高潮视频| 亚洲第一网站| 国产视频一区二区视频| 精品一区二区三区在线播放视频| 精品国产午夜福利在线观看| 成人性视频网站| 亚洲精品视频久久久| 国产精品伦一区| 久久高清无码视频| 一本色道久久综合亚洲精品按摩| 一级特黄免费视频| 日韩欧美在线123| av女名字大全列表| 中文字幕欧美日韩在线| aa在线视频| 日本成人在线视频网址| 99精品国产九九国产精品| 国产伦精品一区二区三区照片91| 国产欧美日韩在线观看视频| 欧美 日韩 国产 在线观看| 99热精品在线观看| 欧美男女交配视频| 成人午夜视频网站| 白白色免费视频| 亚洲图片欧美一区| 啪啪小视频网站| 亚洲精品一区二区三区99| 久久天堂电影| 亚洲91精品在线| 好男人www社区| 亚洲黄色免费看| 成人精品视频99在线观看免费| 国产精品三p一区二区| 亚洲精品免费在线看| 在线欧美三区| 做a视频在线观看| 久久久亚洲高清| 国产亚洲成人精品| 欧美理论电影在线| 九九热视频在线观看| 欧美午夜一区二区福利视频| 国产精品99久久久久久久| 成人久久综合| 久久久精品在线视频| 高清国产一区二区| 亚洲熟女毛茸茸| 欧洲精品一区二区| 日韩欧美亚洲系列| 性欧美xxxx视频在线观看| 精品国产乱码一区二区三区| 欧美精品人人做人人爱视频| 伊人久久亚洲热| 男人操女人下面视频| 国产精品久久久久一区二区三区共| 国产www在线| 亚洲韩国日本中文字幕| 性欧美猛交videos| 成人女保姆的销魂服务| 国产一区二区观看| 免费观看精品视频| 2021国产精品久久精品| 精品视频一区二区在线观看| 欧美一级日韩一级| 国产日产一区二区三区| 成人福利在线视频| 日韩欧美一区免费| 一区二区三区网址| 国产精品私房写真福利视频| 无码人妻av免费一区二区三区 | 在线国产日韩| 欧美一级片在线免费观看| 亚洲精品伦理在线| 国产91视频在线| 欧美精品在线极品| 亚洲91网站| 日本熟妇人妻xxxx| 成人av一区二区三区| 国产无遮挡又黄又爽| 亚洲高清福利视频| 新版的欧美在线视频| 久久久com| 视频一区中文字幕国产| 成人黄色免费网址| 欧美三级欧美一级| 老司机精品视频在线观看6| 91黄在线观看| 在线观看日韩av电影| 日韩免费高清一区二区| 欧美日韩一区二区三区| 邻居大乳一区二区三区| 国产精品成人va在线观看| 日产午夜精品一线二线三线| 五月花丁香婷婷| 一区二区三区四区乱视频| 丰满肥臀噗嗤啊x99av| 97成人在线视频| 国产一区二区三区四区| 老司机午夜性大片| 亚洲男女一区二区三区| 污视频在线免费观看| 国产精品aaaa| 一区二区在线| 国产乱了高清露脸对白| 91福利视频久久久久| 欧美jizzhd欧美| 国产精品国产三级国产专区53 | 日韩电影免费网址| 亚洲五月激情网| 五月天一区二区三区| 爱爱爱免费视频在线观看| 91一区二区三区| 久久综合九色综合欧美狠狠| 91精品国产闺蜜国产在线闺蜜| 亚洲第一区第一页| 日本一区二区电影| 免费人成在线观看视频播放| 久久嫩草精品久久久久| 国产美女无遮挡永久免费| 91极品视频在线| 亚洲精品成人影院| theav精尽人亡av| 3d动漫精品啪啪| 欧美18—19sex性hd| 午夜久久久久久久久久久| 2024国产精品| www.蜜臀av.com| 国产精品久久久久久久久久久久久 | 国产亚洲精品一区二区| 亚洲一区二区三区在线免费| 九九视频精品在线观看| 亚洲国产人成综合网站|