摘要:[會員登入] 如何判別有無這位會員?...DataReader的 HasRows屬性與 .Read()方法
回答一位讀者的問題
其實簡單的會員登入機制並不難寫。
ASP.NET專題實務(文魁出版)的 第十六章就有這個範例的片段。
但他想問的是: DataReader的 HasRows屬性、Read()方法怎麼使用?或是何時該用?
最標準的答案,應該是參考微軟官方網站MSDN的文件:
- SqlDataReader.HasRows 屬性 -- 指出 SqlDataReader 是否包含一個或多個資料列?
-
http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqldatareader.hasrows(v=VS.90).aspx
-
SqlDataReader.Read 方法 -- 將 SqlDataReader 前進到下一個資料錄。
傳回值 型別:System.Boolean
如果有多個資料列,則為 true,否則為 false。 - http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqldatareader.read(v=VS.90).aspx
----------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------
以下是幾個簡單的範例 --
第一,帳號、密碼都通過,確認有這個會員。
我們在 IF判別式裡面,使用了 dr.Read()方法

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

dr.Read()
不需要像以前 ASP的 RecordSet一樣
每讀完一筆紀錄,還要動手寫上 RecordSet.MoveNext()
手動地把指標移到下一筆紀錄
如果後續還有 "未讀取"的資料,ASP.NET 的 .Read()方法會自動前進 (Forward)到下一筆
第二,使用 dr.HasRows來判別
但後續要讀取資料欄位時(如:UserName與UserPW欄位),仍要使用 dr.Read()才能讀到資料。
少了這一行,就會出現錯誤(Invalid attempt to read when no data is present. )。

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

HasRows屬性 有一點 "類似" 以前 ASP的寫法,例如:
If Not RecordSet.EOF Then
....
End If
另外要跟大家提醒的是 --
每一個關聯的 SqlConnection 一次只能開啟一個 SqlDataReader,
而在第一個讀取器(DataReader)關閉以前,任何嘗試開啟其他讀取器將會失敗。
正在使用 SqlDataReader 時,相關聯的 SqlConnection 會忙於服務,直到您呼叫 Close 為止(如Conn.Close())。
這一點跟以前的 ASP RecordSet也很不相同,
必須使用 MARS (多重作用結果集 / Multiple Active Result Sets)來解決
MARS 須搭配 MS SQL 2005 or 後續版本才行
請看MSDN文章 -- http://msdn.microsoft.com/zh-tw/library/h32h3abf(VS.90).aspx
................................................................................................................................................
如果您不想學傳統的 Session來管理,ASP.NET 2.0起,也有自己的會員登入機制
請看這篇文章:
會員登入 與 FormsAuthentication (Web.Config裡面的 authentication mode="Forms")
................................................................................................................................................
今日值班正妹 -- 日本古典音樂界被公推為「美得過火」的小提琴家 宮本笑里
後續補充 ---
======================================================================
1) . 這個範例,可以參考其他類似的範例。
您就可以發現都是套用同一個類似的程式範本來改寫
[ADO.NET] DataReader的標準範例 for ASP.NET 2.0 / 3.5
自己動手寫的版本 ---- 網站的 Master程式 (DataReader)
自己動手寫的版本 ---- 網站的 Detail程式 (DataReader)
2) . Session的觀念可以看看以前的兩篇文章:
FAQ--會員登入、會員專屬網頁、會員修改私人資料,怎麼寫?(#1 觀念篇)
[習題]會員登入、會員專屬網頁、會員修改私人資料,怎麼寫?(#2 範例篇)
3) . 關於會員登入的範例,請看本站的其他文章 -- http://www.dotblogs.com.tw/mis2000lab/Tags/%e6%9c%83%e5%93%a1%e7%99%bb%e5%85%a5/default.aspx
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----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.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。
