顯示具有 DataReader 標籤的文章。 顯示所有文章
顯示具有 DataReader 標籤的文章。 顯示所有文章

2023年6月17日 星期六

[ASP.NET 8.0 MVC] ADO.NET 與 DataReader - Microsoft.Data.SqlClient命名空間



[ASP.NET Core MVC]第一天 免費課程 3小時完整試聽 https://youtu.be/TSmwpT-Bx4I 完整課程 超過 120小時"(外面買不到) 已開始販售,請來信詢問(一定有優惠!) mis2000lab (at) yahoo.com.tw; school (at) mis2000lab.net。謝謝您 課程列表與大綱,請看 mis2000lab.pixnet.net/blog/post/35172535 9vs1 . com網站的三天入門課程 9vs1.com/go/?i=192277ff2276 這位學員學了半年,公司幫他加薪150%(真人真事) www.dotblogs.com.tw/mis2000lab/2020/09/23/ASPnet_MVC_online_20200923 學員感言與推薦 - www.dotblogs.com.tw/mis2000lab/2023/01/30/mis2000lab_MVC_onlineLearning2023

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

2017年1月9日 星期一

19/30 ADO.NET與資料庫 #2 -- ADO.NET程式 DataReader為何不能分頁?

從上一篇文章起( http://mis2000lab.blogspot.com/2017/01/1830-adonet-1-adonet.html
我們開始自己寫程式 作資料存取
DataSet / DataReader兩者的差異,可以參閱這篇文章
** 初探ADO.NET #2,DataReader 與 DataSet(資料集)**
https://dotblogs.com.tw/mis2000lab/archive/2008/08/15/4919.aspx
ADO.NET程式 DataReader為何不能分頁?
這句話是什麼意思?
「從資料來源讀取「順向」且「唯讀」的資料流」,有範例示範一下,為我說明嗎?

後續的範例也會跟各位介紹 「DataReader + 自己寫SQL指令做分頁」
  1. 當我們要查詢數據時,如果數據量太大,要自己寫SQL指令做 "分頁" 呈現。
    您在Google查到一千筆數據,Google也是分成一頁一頁的呈現吧?
  2. 畫面的呈現,可以透過GridView、Repeater(這東西 "預設"不提供分頁功能)來呈現,但分頁功能則是我們自己寫的。或是透過 DataReader來呈現每一頁的數據。
這些範例在後續都會為您介紹。
順便也分享一篇文章。
如果您對於DataReader / DataSet想進一步瞭解,我收集了許多前輩的經驗談
[ADO.NET] Web Form為求快速,可使用 DataReader直接處理資料來源
https://dotblogs.com.tw/mis2000lab/2012/01/13/dataset_datareader_20120113
下一篇文章,讓我們開始動手寫程式--
ADO.NET與資料庫 #3 -- 跨平台(Web + Windows)的程式與範例

2016年12月27日 星期二

第一天 ADO.NET Samples -- DataReader v.s. DataSet與DataTable (用完就空了的 DataReader)

第一天 ADO.NET Samples -- DataReader v.s. DataSet與DataTable
(用完就空了的 DataReader) 本範例搭配 Youtube教學影片

相關的兩篇文章:

第一天 ADO.NET Samples -- DataSet(課程範例)& 圖解

初探ADO.NET #2,DataReader 與 DataSet(資料集)


本篇文章作為上課的補充教材
我們在上課的時候提到 DataReader 與 DataSet兩者的差異
也提醒各位其中的觀念與作法不同

強烈建議您看完這篇文章 與 裡面的超連結(相關文章):

[ADO.NET] Web Form為求快速,可使用 DataReader直接處理資料來源


底下範例本來是今天看書的讀書心得
講到 Single-Value DataBinding 與 Repeated-Values DataBinding
但是,我突然想用這些範例來 demo
      DataReader 與DataSet兩者的異同,也很有趣。

早在 .NET 1.x版就有這東西了,詳見微軟官方網站 -- http://msdn.microsoft.com/en-us/library/aa713238(v=vs.71).aspx
事實上,大家都有使用過,只是沒注意這個「專有名詞」罷了

我的書本 "下集",ASP.NET專題實務(II) / 松崗出版
有一章專門講 DataBinding 與 DataBinding Expression(資料繫結運算式)

新的補充範例將會加入這章節,將來出新書會把這部分加入
下一版不知道是 ASP.NET 4.5.3 或是 ASP.NET 5.0 ?

YouTube教學影片 -- https://youtu.be/U_kHOTEFw2U

請看下面兩張圖片:
(1).  第一個範例,使用DataReader來做
為什麼三個清單控制項,只有第一個可以正常運作呢?
知道錯誤在哪裡?您就理解了 DataReader的原理與作法
  
(2). 後續兩個範例,不管是用 DataTable or DataSet來做,都是正常的。
這又是為什麼呢?



這個範例因為使用到 DataReader
剛好另一篇文章也有類似的成果,讓您參考 

[ADO.NET] DataReader 與 CommandBehavior補充說明

  
觀念清楚,程式碼就簡單!
觀念清楚,Debug就輕鬆!

[自我評量表] ASP.NET 我該上什麼課?入門、或是進階?...以「ASP.NET專題實務」本書為例


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

2016年12月21日 星期三

[YouTube影片] 如果程式「會動」就好,學那麼多屬性與方法幹嘛?

[YouTube影片] 如果程式「會動」就好,學那麼多屬性與方法幹嘛?

如果「程式會動就好」,學那麼多屬性與方法幹嘛?
那麼原廠提供這些屬性與方法,是窮極無聊嗎?還是原廠提供更多選擇,只是自己不會用?
提供 YouTube教學影片


初學者往往只要拿到「範本」、「程式碼」
改得動,會跑(run)、能執行就好。
下次繼續複製貼上,微調一下又能用,豈不是方便、省時?

那我就覺得很奇怪?
既然一個會動的方法或屬性就能打通關,原廠提供那麼多文件講解各種屬性、方法、事件
他們(原廠)是不是吃飽太閒?才寫出這麼多東西給我用?
還是........
我根本只會這一百零一招,其他東西,我不會用也看不懂?也不會變化?


以下我用同一個範例,介紹 DataReader / SqlCommand :
(1). HasRows屬性
(2). CommandBehavior列舉類型原廠MSDN說明
(3). 參數(避免 資料隱碼攻擊、SQL Injection攻擊)

YouTube影片 -- https://youtu.be/mRIWGsUS8Cw


以前,看不懂MSDN原廠文件,覺得那都是「火星文」
    可能是自己能力還不夠
    可能是沒有人帶領、沒有「實用的範例」可以解釋(所以無法引發興趣)....甚至原廠文件沒有提供範例  Orz
    可能是屬性、方法太多了.....多到根本學不完,只好放棄 (那今天我幫您整理出「最常用」、「次常用」的,您應該很容易上手吧!)


這就是我想寫這本書的原因
只要有人帶你走一段路,提供「實用範例」,先整理出「常用的」東西讓您上手....
您就會知道原廠MSDN文件之好用 與 博大精深
久了就自己看得懂,也養成習慣(自己去看、自修)

========================================================

新書上市,團購優惠價。現貨供應,不需等待。直接來信吧!

https://dotblogs.com.tw/mis2000lab/2016/07/25/dotnet_access_adonet_book_2016

========================================================
深入探索 .NET資料存取:ADO.NET + SqlDataSource+ LINQ
MIS2000 Lab. / 周棟祥博士 / 吳進魯
出版日期: 2016-08-03
出版商: 松崗    定價:$820
頁數: 840
ISBN: 9572245686
ISBN-13: 9789572245682
本書提供 VB & C# 雙語法範例   **由此下載**


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

ASP.NET Core & ADO.NET 入門 #1 -- 資料庫連結(SqlConnection)

ASP.NET Core & ADO.NET 入門 #1 -- 資料庫連結(SqlConnection)


ASP.NET Core & ADO.NET 入門 #1,最簡單的操作步驟
(1).  SqlConnection連結字串
本範例提供YouTube教學影片 + PDF電子書下載

***  行前準備  ***
首先,您可以先瞭解 開放原始碼(開源)的 ASP.NET Core(以前名為 ASP.NET 5
      [中文翻譯] ASP.NET 5 概觀 (ASP.NET 5 Overview,原作 Tom FitzMacken 2014/11/12)
      https://dotblogs.com.tw/mis2000lab/2014/12/03/aspnet_5_overview_webform_46      
      [中文翻譯] ASP.NET 5 簡介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)
      https://dotblogs.com.tw/mis2000lab/2015/03/11/aspnet_5_introduce_scottgu_20150223

接著,當您打開 VS 2015 (Update 3)的時候,可能要先安裝這個套件 for VS 2015。這個 Tool 還是 Preview版
      系統會自動偵測,並詢問您是否安裝?

以下的範例,是從 Wrox出版的這本書而來,您可以參閱此書的 第三十七章(原廠網站有範例下載)

Professional C# 6 and .NET Core 1.0


Christian Nagel
ISBN: 978-1-119-09660-3
1536 pages
April 2016......註解:提醒您,這本書以為 Windows Form 主軸,並非 網頁範例為主
==========================================================================
YouTube教學影片 -- https://youtu.be/1UaO8C2MnJQ


*** 開始動作 ***
(1). VS 2015 新建一個 ASP.NET Core 的 Web專案。
      下一步,我選擇了「」專案

(2). 這是ASP.NET Core 「」專案的架構
很抱歉,關於這個架構的檔案、目錄,我暫時沒有研究。如果您想進一步瞭解,請參與網路上的其他文章

(3). 預設的狀態下,您就可以編譯這個專案,而且看見結果(執行後,網頁出現 Hello World 字樣)
對照起來,原來是在 Startup.cs這個檔案的最後下方,就有 Hello World 字樣

(4). 我們加入熟悉的 ADO.NET程式碼(以 DataReader + SqlConnection / SqlCommand為例)
    如果您不熟悉,可以參閱以前的文章與範例 -- 

這裡的變化比較大。
以前撰寫程式時,如果缺乏 NameSpace,您可能要在程式碼「最上方」自己動手寫進來
甚至.....您要使用「加入參考」把這個DLL檔(二進位檔案)加入您的網站或專案

但是在 ASP.NET Core,我們可以有下面兩種作法。任選其一即可。

4-1.    透過 Visual Studio來幫忙,自己會幫您完成。詳見下面圖解。
Visual Studio會自動幫您加上 NameSpace,也會在 project.json設定檔裡面,加入必要的元件。


4-2.    當然,如果您是死硬派!硬漢!堅持要動手寫!
          在 project.json設定檔裡面,也可以透過智慧選字(IntelliSense),會自動跳字讓您填寫。

(5). 程式碼大致如下:

                //== 方法一 ==   
                string connectionString = @"server=.\sqlexpress;integrated security=SSPI;database=我的資料庫名稱";
                var conn = new SqlConnection(connectionString);
                conn.Open();
                // Do something useful
                await context.Response.WriteAsync("
資料庫連結成功");
                conn.Close();
               //== 當然,我們可以把資料庫的連結字串,寫在設定檔裡面。例如 appsettings.json設定檔,下一篇文章 為您解說。
              //{
              //  "ConnectionStrings": {
              //    "DefaultConnection": "Server=.\\sqlexpress;Database=我的資料庫名稱;Trusted_Connection=True;MultipleActiveResultSets=true"
              //  }
              //}

==========================================================================

Q :  ADO.NET怎麼只剩下 DataReader了?以前慣用的 DataSet呢?

詳見這篇文章的說明 (2016/2/10發表)  https://blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core/
System.Data. While the base layer is already part of .NET Core, i.e. the provider model and SQL client, some features are currently not available, such as schema support and DataTable/DataSet.

System.Transactions. While ADO.NET supports transactions, there is no support for distributed transactions, which includes the notion of ambient transactions and enlistment. (您可以參閱我這本書 -- 深入探索 .NET資料存取:ADO.NET + SqlDataSource+ LINQ (松崗),有討論 System.Transaction)


System.Net.Mail. There is currently no support for sending emails from .NET Core using these APIs.
目前 Core 1.0 不支援,不代表以後不支援。所以也不用太絕望....等等看吧......

下一篇文章:

ASP.NET Core & ADO.NET 入門 #2 -- 讀取appsettings.json設定檔與參數的寫法(SqlCommand)

http://mis2000lab.blogspot.tw/2016/12/aspnet-core-adonet-2.html 

我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ