摘要:[習題]上集 Ch 14-4 撰寫ADO.NET DataReader的分頁程式#3(搭配SQL 2012指令 OFFSET...FETCH)
速度比起 ROW_Number差不多,
但比較起來,新的寫法比 ROW_Number省資源
上一篇文章,也是透過SQL指令來進行資料分頁
遠比在「HTML畫面上」寫程式分頁快速多了!!
詳見:[習題]上集 Ch 14-4 撰寫ADO.NET DataReader的分頁程式#1(搭配SQL指令 ROW_NUMBER)
http://www.dotblogs.com.tw/mis2000lab/archive/2010/11/30/datareader_paging_row_number.aspx
今天看書時,發現一個新的指令
SQL 2012起,多了 OFFSET...FETCH的指令來輔助 Order By,也可以做資料分頁喔。
如果您是撰寫 ASP.NET MVC,分頁的原理其實雷同。請參閱 http://mis2000lab.pixnet.net/blog/post/35057473
或是 https://mis2000lab.blogspot.tw/2018/04/aspnet-mvcskip-take.html
影片網址 - https://www.youtube.com/watch?v=37q5qez6cbU
當然,您跟我一樣,花十分鐘看一下SQL Server大師 --德瑞克的網站就會了
請看:SQL Server 2012 :分頁處理:認識 OFFSET 和 FETCH 子句
http://sharedderrick.blogspot.tw/2012/06/t-sql-offset-fetch.html
啊!!!!!!!!德瑞克大師的功力灌頂之後,
我馬上把我的分頁程式改成這樣
只花了兩分鐘!!!!!(因為我資質弩鈍,花了一點時間練習)
請打開書本,或是參閱以前的範例
把SQL指令改成這樣
//== 參數的寫法 ==
String SqlStr = "Select test_time, id, title, summary from test Order By id
OFFSET @Page1 ROWS FETCH NEXT @Page2 ROWS ONLY";
SqlCommand cmd1 = new SqlCommand(SqlStr, Conn);
cmd1.Parameters.AddWithValue("@Page1", NowPageCount);
cmd1.Parameters.AddWithValue("@Page2", PageSize);
dr = cmd1.ExecuteReader();
完成了!YA!!
如果我的說法沒錯的話,這是我「個人」整理出來的重點:
OFFSET X ROWS 代表你忽略了前面幾筆記錄(也就是從這裡 開始讀取,從頭開始算起,第一 "頁" 的編號請用「零」代表 )
FETCH NEXT Y ROWS ONLY 代表你從「第幾列」向後 讀取 (我 只要 這幾列的記錄即可!或是說,每一頁要呈現幾筆記錄?)。
根據 SQL Server大師 --德瑞克 文章裡面的說法
-- 速度比起 ROW_Number差不多,
-- 但比較起來,新的寫法比 ROW_Number省資源
沒錯!您還不趕緊去練功.... SQL Server 2012 :分頁處理:認識 OFFSET 和 FETCH 子句
這裡是微軟 msdn網站的說明(中文) -- http://technet.microsoft.com/zh-tw/library/gg699618(v=sql.110).aspx
- ORDER BY 會強制使用 OFFSET 和 FETCH 子句。
- OFFSET 子句則強制搭配 FETCH 使用。您絕對不可以使用 ORDER BY … FETCH。
- TOP 不可以在相同查詢運算式中與 OFFSET 和 FETCH 結合。
- OFFSET/FETCH 資料列計數運算式可以是任何將傳回整數值的算術、常數或參數運算式。資料列計數運算式不支援純量子查詢。
如果您是撰寫 ASP.NET MVC,分頁的原理其實雷同。
請參閱 http://mis2000lab.pixnet.net/blog/post/35057473
或是 https://mis2000lab.blogspot.tw/2018/04/aspnet-mvcskip-take.html
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。