顯示具有 ASP.NET WebForm 標籤的文章。 顯示所有文章
顯示具有 ASP.NET WebForm 標籤的文章。 顯示所有文章

2018年4月16日 星期一

[習題]上集 Ch 14-4 撰寫ADO.NET DataReader的分頁程式#3(搭配SQL 2012指令 OFFSET...FETCH)

摘要:[習題]上集 Ch 14-4 撰寫ADO.NET DataReader的分頁程式#3(搭配SQL 2012指令 OFFSET...FETCH)

速度比起 ROW_Number差不多,
但比較起來,新的寫法比 ROW_Number省資源





上一篇文章,也是透過SQL指令來進行資料分頁
遠比在「HTML畫面上」寫程式分頁快速多了!!

今天看書時,發現一個新的指令
SQL 2012起,多了 OFFSET...FETCH的指令來輔助  Order By,也可以做資料分頁喔。
教學影片  https://www.youtube.com/watch?v=37q5qez6cbU

如果您是撰寫 ASP.NET MVC,分頁的原理其實雷同。
請參閱  http://mis2000lab.pixnet.net/blog/post/35057473
或是  https://mis2000lab.blogspot.tw/2018/04/aspnet-mvcskip-take.html




當然,您跟我一樣,花十分鐘看一下SQL Server大師  --德瑞克的網站就會了

啊!!!!!!!!德瑞克大師的功力灌頂之後,
 我馬上把我的分頁程式改成這樣
只花了兩分鐘!!!!!(因為我資質弩鈍,花了一點時間練習)
  
請打開書本,或是參閱以前的範例
把SQL指令改成這樣
        //========================
        //== 組合SQL指令 =============
        SqlDataReader dr = null;

//== ADO.NET 參數的寫法 ==
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();
        //== 第三,自由發揮 ======================
        while (dr.Read())
        {
            haveRec = true;   // 後續省略......
 完成了!YA!!


如果我的說法沒錯的話,這是我「個人」整理出來的重點:
OFFSET X ROWS   代表你忽略了前面幾筆記錄(也就是從這裡  開始讀取,從頭開始算起,第一筆的編號請用「零」代表 )
FETCH NEXT Y ROWS ONLY  代表你從「第幾列」向後 讀取 (我 只要 這幾列的記錄即可!)
  
根據 SQL Server大師  --德瑞克 文章裡面的說法
--  速度比起 ROW_Number差不多,
--  但比較起來,新的寫法比 ROW_Number省資源

  
這裡是微軟 msdn網站的說明(中文) -- http://technet.microsoft.com/zh-tw/library/gg699618(v=sql.110).aspx
使用 OFFSET - FETCH 的限制
  • ORDER BY 會強制使用 OFFSET 和 FETCH 子句。
  • OFFSET 子句則強制搭配 FETCH 使用。您絕對不可以使用 ORDER BY … FETCH。
  • TOP 不可以在相同查詢運算式中與 OFFSET 和 FETCH 結合。
  • OFFSET/FETCH 資料列計數運算式可以是任何將傳回整數值的算術、常數或參數運算式。資料列計數運算式不支援純量子查詢。
  
下列範例示範 OFFSET-FETCH 子句搭配 ORDER BY 的使用方式。
範例 1:略過已排序之結果集的前 10 個資料列,並傳回其餘資料列。 
SELECT * FROM [test] ORDER BY id     OFFSET 10 ROWS;

 範例 2:略過已排序之結果集的前 5 個資料列,並傳回接下來的 5 個資料列 
SELECT * FROM [test] ORDER BY id 
           OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;  
執行成果如下圖


如果您是撰寫 ASP.NET MVC,分頁的原理其實雷同。

請參閱  http://mis2000lab.pixnet.net/blog/post/35057473
或是  https://mis2000lab.blogspot.tw/2018/04/aspnet-mvcskip-take.html


相關文章:

http://mis2000lab.pixnet.net/blog/post/33836306

2015年12月3日 星期四

不寫畫面的網頁程式設計,Web API、Web Service、WCF Service

客戶有一個系統,三不五時要連上我方,查詢資料
以前的作法是給對方一個帳號,讓他可以連上我們的DB來查詢。
所以,早期的同仁,真的給他們DB連結字串
客戶的Windows程式、網站就真的靠這麼危險的方式,連上我們公司的DB。
但怎麼想都覺得危險,而且......
如果對方SQL指令亂下,把效能搞得更爛,豈不是慘兮兮?
如果對方不小心,設定檔被偷走,看到我方DB資訊怎麼辦?
幾年前的 Internet還沒有那麼大的頻寬,所以還得種種限制,避免他們一次查詢太多數據

我接手以後,改用了Web Service (WS-*)來做,之前我有幾篇文章介紹過。
沒想到一晃眼也七八年過去了
滿有趣的,前些年,我網站上流量或是點閱率最高的就是 -- 搜尋「Web Service」這個關鍵字而連上我的網站

後來客戶導入了電話語音卡(CTI)
就是我們打電話給銀行、信用卡公司,電話裡面的語音系統都會請您這樣操作:
按下一,幫您查詢帳單金額
按下二,幫您做XYZ等等
按下九,幫您轉接專人。
你把我打一頓,我也不會、不懂CTI電話語音卡、電話總機啊
那我怎麼跟廠商合作?數據怎麼交換?
廠商問我:會不會Socket,可以彼此串連?
我不會。
我問他:您的CTI可以連上網路嗎?可以收發網頁資訊嗎?
廠商說可以。
於是,透過Web Service一路做到今天。

去年,這套系統改成 Mobile APP(手機與平版)的介面。
我呢?我要怎麼配合修改?
沒有,我完全沒事做,發呆,等廠商寫好後,跟我測試而已
然後就上線了
然後呢,莫名其妙的,變成這部門第一套走入行動運算的功能
老闆很開心地拿去跟別人炫耀
(我什麼事都沒做,結果呢?大家都很開心,包含:我、合作廠商、老闆、客戶)

前些天,一位大學的老師跟我聊天,說現在流行前端技術,大家都在做手機APP
他擔心:有了畫面,那資料誰來餵?誰負責提供資料給這些APP呢?
(意思是說:每個人都在搞手機APP、手機遊戲。一窩蜂,好像沒人想做後端、資料庫程式了)
我跟他說,那很好啊。都沒人做,就給我做吧。
反正我對於前端技術沒興趣,我就專心挖資料、傳遞數據,提供他們(各種前端技術)資料吧
他們(各種前端技術)負責  "畫面"展示
我負責  "資料存取"
這樣很棒,大家都有工作。
而且不像以前,畫面做得不好看、配色、UI......對方GGYY了老半天,但那不是我的專長,我怎樣都滿足不了對方的審美觀
終於跟討人厭的「畫面」「UI」脫離了
我反倒鬆了一口氣

這代表我不用接 End User的抱怨電話了,以後他們來電抱怨,頂多就是我給的資料不對
(雖然資料有錯,是很嚴重的事,但至少我熟悉這一塊,比較好抓出問題)
User再也不會抱怨 "畫面"的問題、字體大小、UI不順或是不好看
(前端畫面的美醜,我比較無能為力)

以前寫 ActionScript程式產生 Flash動畫與AIR時,覺得很奇怪,
怎麼他們的程式沒有連結資料庫的部分呢?
後來才發覺,他們透過Web Service來處理,讓「畫面」歸「畫面」,「資料來源」歸「資料來源」
其實區分得很清楚。

以前都說我們是寫 "網頁" 的
以後,我可以說我們是提供「數據」的、提供「服務」的
Web Service / WCF Service / WebAPI 救了我們一命,也延續了我們(網頁程式)的生命週期

相關文章:

我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
......... 寫信給我,mis2000lab (at) yahoo.com.台灣 .....................................................................................
................   facebook社團   https://www.facebook.com/mis2000lab   ............................
................   Google+   https://plus.google.com/100202398389206570368/posts ..............
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!微軟MVP --MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課