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)的程式與範例

18/30 ADO.NET與資料庫 #1 -- ADO.NET程式的四大步驟

今天開始,我們試著「自己寫程式」做資料庫的存取。
上一篇文章  http://mis2000lab.blogspot.com/2017/01/1730-9-optimistic-concurrency.html
ADO.NET程式的四大步驟--以DataReader為例。
並且用SqlDataSource簡單說明ADO.NET底下兩名大將--DataReader & DataSet。
今天的 Youtube影片 https://youtu.be/zeXgLVqSy50

如果您需要一些文章、範例來參考,請看
初探ADO.NET #1,程式與資料庫互動的四大步驟
https://dotblogs.com.tw/mis2000lab/2008/08/15/4918
初探ADO.NET #2,DataReader 與 DataSet(資料集)
https://dotblogs.com.tw/mis2000lab/archive/2008/08/15/4919.aspx
下一篇文章
ADO.NET與資料庫 #2 -- ADO.NET程式 DataReader為何不能分頁?
http://mis2000lab.blogspot.com/2017/01/1930-adonet-2-adonet-datareader.html 


17/30 網頁與資料庫#9 -- 開放式並行存取 (Optimistic Concurrency)

SqlDataSource控制項的設定步驟裡面
當您按下「進階」按鈕,就會產生對應的新增、刪除、修改的SQL指令
(上一篇文章 http://mis2000lab.blogspot.com/2017/01/1630-8-html.html )
有一個選項,名為「開放式並行存取 (Optimistic Concurrency)」
名詞有點坳口,這到底是什麼東西啊?
我用 Youtube影片為您示範一次,希望這樣比較容易明瞭。
SqlDataSource 開放式並行存取 (Optimistic Concurrency),以GridView為例
https://youtu.be/R9c3krJrZsE

其實,您在大型控制項的 xxx_Updating事件裡面可以看到這樣的程式碼,意思也差不多。
e.NewValues["欄位"]
e.OldValues["欄位"] ,簡單的說,這就是您修正「以前」,原本的數值
用來偵測、比較,您取出這一筆記錄時,是否有人也同時取出修改?
如果是的話,那麼您寫回資料庫時,就會被阻擋。
不知道我這樣解釋「開放式並行存取 (Optimistic Concurrency)」,有沒有比較清楚?
這個範例可以很明白的指出:
文字+圖片的傳統敘述,比不上現場操作(影片)的解說
可以讓人一看就懂。
下一篇文章,我們開始自己寫 ADO.NET 程式存取資料庫吧?不要再依賴精靈了
請看 http://mis2000lab.blogspot.com/2017/01/1830-adonet-1-adonet.html

16/30 網頁與資料庫#8 -- 自己設計HTML畫面的 "新增"一筆記錄

前面幾篇文章,都使用到大型控制項(如GridView or DetailsView)與SqlDataSource,快速產生CRUD的資料存取畫面。
上一篇文章 http://mis2000lab.blogspot.com/2017/01/1530-7-gridview.html
但使用這些大型控制項,因為不好修改,如果您搭配前端設計師(媒體設計、美工人員),對方可能不願意配合。在這種情況下,盡量讓畫面上的輸入欄位,越貼近傳統HTML表單、變化越少,可能會好一些。
所以今天要跟大家分享的就是:
以基礎的Web控制項(如TextBox、清單控制項等等),作為畫面輸入(新增)的輸入元件
目前雖然還沒有能力,自己寫程式存取資料庫(如ADO.NET)
但仍可以搭配 SqlDataSource來幫幫忙
YouTube教學影片 https://youtu.be/VDLu879rt14

這個範例,最早是在 章立民老師 的書本裡面看見的(用實例學ASP.NET 3.5-基礎篇,碁峰出版社)
因為我沒有記憶、背誦 SqlDataSource產生的 <標籤>
所以我找了一下 Visual Studio的設定步驟,發現這些步驟可以自動產生這些<標籤>
對初學者來說,接受度比較高
也分享給大家
感恩 章立民老師在資訊大道上,不斷提攜、教育我們
從大學畢業專題,我就是用 章老師的書籍 -- FoxPro 2.6做為參考
文末也分享 章立民老師 的大作,我非常喜歡這篇文章 --
笑談我的學習之路
https://dotblogs.com.tw/limingstudio/2009/11/13/11759
下一篇文章: 網頁與資料庫#9 -- 開放式並行存取 (Optimistic Concurrency)
http://mis2000lab.blogspot.com/2017/01/1730-9-optimistic-concurrency.html

15/30 網頁與資料庫#7 -- 我的 GridView有 "新增"功能

上一篇文章( http://mis2000lab.blogspot.com/2017/01/1330-5-calendardatabinding.html )提到:
當我們練習多個ASP.NET控制項、SqlDataSource的互動。
您可知道這些精靈組合出來的東西,有不少漏洞與缺失?
該怎麼處理?考驗您(初學者)對ASP.NET觀念是否熟悉?
尤其是「DataBinding的時機」
==========================================
如果您可以控制 大型控制項 「DataBinding的時機」
那麼您可以進行下一個範例「我的 GridView有 "新增"功能」
透過控制 GridView的資料來源:
  1. "有"資料的時候,就呈現資料。一般的 GridView外觀。
    例如 GridView1.DataSourceID = "SqlDataSource1"
    或是
    GridView1.DataSource = ds(註:自己寫程式 DataSet or DataTable等)
    GridView1.DataBind()
  2. "沒有" 資料時,就呈現GridView「空白樣版 EmptyDataTemplate」。
    裡面事先加入 DetailsView的「新增」便可完成
    例如
    C#語法的GridView1.DataSourceID = null
    VB語法的GridView1.DataSourceID = Nothing
今天的 YouTube影片: https://youtu.be/86u63WJrZ34

============================================
推薦微軟MVP -- KK Bruce老師的文章,寫得非常詳細喔
GridView「新增」功能 破解 完整攻略
kkbruce.blogspot.com/2010/04/gridview.html
GridView新增功能 圖文篇
kkbruce.blogspot.com/2010/07/gridview.html
好的,我們的下一篇文章將會分享
如果畫面上「不使用」大型控制項?例如:不使用 DetailsView控制項
完全用「基礎」的Web控制項來設計畫面,能否(盡量)不寫程式也做到資料新增??
詳見下一篇文章 http://mis2000lab.blogspot.com/2017/01/1630-8-html.html 

14/30 網頁與資料庫#6 -- SqlDataSource做不到、做不好的地方

雖然前面的文章 (http://mis2000lab.blogspot.com/2017/01/1330-5-calendardatabinding.html)
提到 SqlDataSource加上大型控制項(資料繫結控制項)可以做出不少變化
但還是有些隱藏的缺失
也因為有這些缺失,所以自己寫程式來處理,可以做得比「精靈」更好
今天與您分享的就是:SqlDataSource做不到、做不好的地方
Youtube影片:https://youtu.be/P7AKhH-9YrE

當我們練習多個ASP.NET控制項、SqlDataSource的互動。
您可知道這些精靈組合出來的東西,有不少漏洞與缺失?
該怎麼處理?考驗您(初學者)對ASP.NET觀念是否熟悉?
尤其是「DataBinding的時機
==========================================
如果您可以控制 大型控制項 「DataBinding的時機
那麼您可以進行下一個範例「我的 GridView有 "新增"功能」
透過控制 GridView的資料來源:
  1. "有"資料的時候,就呈現資料。一般的 GridView外觀。
  2. "沒有" 資料時,就呈現GridView「空白樣版 EmptyDataTemplate」。
    裡面事先加入 DetailsView的「新增」便可完成
請看下一篇文章

13/30 網頁與資料庫#5 -- 樣板裡面的 Calendar日曆控制項「編輯DataBinding」無法呈現日期?

樣板裡面的 Calendar日曆控制項「編輯DataBinding」無法呈現日期?
ASP.NET 大型控制項轉成「樣板(Template)」以後,沒想到日曆控制項會遇見這種錯誤?
對應資料表欄位的 DateTime格式會出一點小bug。
幸好透過資料繫結運算式 (DataBinding Expression)就能修正,很簡單。
SelectedDate='<%# Convert.ToDateTime(Eval("欄位名稱", "{0:yyyy/MM/dd}")) %>' .... 
當資料表裡面的日期與時間,預設的時間是 上午12:00:00 或是 00:00:00。
日曆控制項正常呈現。
圖片下方,資料表裡面的「時間」不是預設值的時候,日曆控制項無法呈現結果????


透過影片教學來分享這個有趣範例......

關於本文與範例,請看 www.dotblogs.com.tw/mis2000lab/archive/2015/08/05/databinding-expression-calendar-datetime-template.aspx
下一篇文章,請看:
網頁與資料庫#6 -- SqlDataSource做不到、做不好的地方

12/30 網頁與資料庫#4 -- 大型控制項的樣版(Template)與清單控制項

延續上一篇文章的主題(http://mis2000lab.blogspot.com/2017/01/1130-3-template.html)
我們繼續下去
如果您要在大型控制項「裡面」、樣版「裡面」加入清單控制項,如DropDownList
有這兩種情況
第一,選項很簡單,例如:是/否? 男/女?
第二,選項多而且可能異動。例如:出生地、部門別、科系....
出生地(縣市)可能因為行政區重整,做修改
部門可以擴編或是異動
當初就讀的科系可能改名字或異動
我直接用Youtube教學影片說明,比較清楚 -- https://youtu.be/Gaatqr2pJFw

以今天分享的範例來說,其實滿實用的
我也是在台灣幾本入門書上沒看見,才想到要做這示範
下一篇文章則是讀者詢問的範例,頗為有趣 -- 
http://mis2000lab.blogspot.com/2017/01/1330-5-calendardatabinding.html

11/30 網頁與資料庫#3 -- 大型控制項的樣版(Template)

今天要分享的範例是「大型控制項的樣版(Template)」
上一篇文章  http://mis2000lab.blogspot.com/2017/01/1030-2-sqldatasource.html
網站的「前台」,給一般用戶(End User)觀賞時,當然是爭奇鬥艷,各種前端的花俏技巧都得加上。
但到了「後台」,也就是必須輸入會員帳號、密碼才能看見的「網站管理區」
這裡的功能就很單純,但是程式數量很 "多",例如:資料存取(CRUD)、查詢(搜尋)、各種報表的產生(光是各式各樣的報表,都是幾十份起跳!)....等等。
如果一個一個功能,還是得 自己寫程式+自己手寫HTML畫面,那麼「生產力」太差勁了
ASP.NET (Web Form)最強的的應該就是「大型控制項」,尤其是「資料繫結控制項」吧
常用的功能,可以快速完成,然後小幅修改即可。
其實修改大型控制項,除了畫面上的修改(樣版)以外
也可以在後置程式碼裡面動手,但這難度又高了一點點。沒關係,我們慢慢來.....
問題是:接下來的這兩個小幅修改(範例),該怎麼做呢?
第一個比較簡單,我們只是把 TextBox(文字輸入方塊)改成 Calendar日曆控制項
用意是:避免使用者輸入「日期格式」時,自己填寫毫無規範。
例如:有人寫2017/1/1,有人會補上零 2017-01-01,有人寫日月年格式 Jan-1-2017
不如直接點選 Calendar日曆控制項 ,產生的「日期格式」比較一致化
請看 Youtube教學影片 - https://youtu.be/Sr61a1sCSqM

這個範例有兩三種變化,也可以說「大型控制項+基礎控制項」可以做出什麼變化呢?
我得在下一篇文章,再與您分享了
http://mis2000lab.blogspot.com/2017/01/1230-4-template.html