2-1 ASP.NET簡介
微軟推行的.NET 平台,是利用網路為傳輸媒介,以 XML 為資料傳遞的格式,利 用.NET Framework 所建構出的基礎,將所有可執行微軟平台的設備達到資訊互通 的目標,這包括支援微軟平台的個人電腦、筆記型電腦、PDA、手機、甚至可能 是家電或是其他設備。許多應用程式都以這種架構設計,最典型的 Web Application 也不免的成為微軟主推的一種應用程式架構。利用 Web Browser 在各種平台的共 通性,以及以 XML 傳送資料的方式,將原本都是使用 Window Form 的應用程式,
多了一種介面。Web Form 的好處,在於不需要安裝 Client 端程式,因為 Browser 就是 Client 端程式。更方便的解決需求,使得 Web Form Application 大受歡迎。
Asp.net 的產生,就是為了Web Form Application 而設計的架構。
在 ASP.NET 裡加入了許多新的功能,使得設計方式更加近似於 Window Form:
1. Code Behind-
首先我們先看以下一段程式碼:
在 ASP.NET 中可以使用將程式碼寫在另一個 C#程式檔中,把 html 語法及程式 碼分離的設計方式,稱為 Code Behind。在此例中,我們將 Default.aspx 的程式 碼寫在 Default.cs。在開發網站程式時,經常是由網頁設計者與程式撰寫人員分 工合作,為了獨立這兩大部分的工作,Code Behind 是一個很好的撰寫的設計。
圖 2.1 利用 header 設定連結程式碼
2. 與 ADO.NET 的連結-
在經過了 ADO(Active Data Object)的經驗後,設計人員發現 RecordSet 的缺 點。因為 RecordSet 需持續的與資料庫連線一筆一筆取得資料,持續連線造 成的與資料庫頻寬不足,造成效能無法提升。在 ADO.NET,這不是 ADO 的改良版本,而是完全與 ADO 不同的資料庫連結設計方式。利用離線存 取策略,ADO.NET 將資料存入 DataSet-一個暫時的離線資料庫,我們可 以對 DataSet 的資料進行新增刪除修改查詢的動作,而 DataSet 本身就是一 個 XML 文件,使用非常方便。當發生資料被修改過後,再與資料庫連結。
這種離線存取的方式,大大的降低了資料庫的負擔,提升了效能。
3. 更豐富的設定及使用者控制項-
你可以自訂一個使用者控制項,再利用如下列的方式:
<asp:Label id="spanAdd" Text="add" runat="server"/>
這是 ASP.NET 內建的 label 控制項,你可可以在網頁上直接把這個控制項 加入,只要填入需要的參數便可以使控制項啟動。
此外,你可以自己建立自己的命名空間以及控制項,例如
<IECS:login id="StudentLogin" runat="server"/>
這可以表示為一個在 IECS 命名空間中的一個登入控制項。
4. 編譯而非直譯-
在 ASP 的時代,由於是使用直譯的方式執行,常常被批評效能不佳,這 次.NET 平台除了改變以往的編譯模式,使用 IL(Intermediate Language)及 JIT(Just In Time)來增加對其他平台的支援,也將 ASP.NET 同樣的做了變 更,第一次的執行較慢,但是可以將之後存取的效能提升。
圖 2.2 Asp.net 運作流程圖 5. 多語言支援-
.NET 平台目前所知共可支援常用的程式語言共 25 種之多,包括 C++、
JAVA(J#)、C#、VB、COBOL、SMALLTALK 等等,目前 ASP.NET1.0 已支 援 C#及 VB.NET,在 1.1 版更會加入 J#為開發 web form 程式的基礎語言。
此外,在同一個程式中,可以使用多種語言來共同開發程式,真正達到"
跨語言"的目標。
6. 快取的功能- 過 IIS 設置成為虛擬目錄後即可使用,或者是更可以利用 Visual Studio.NET 封裝精靈把程式包裝成為一個安裝檔,即可快速的完成部署網站。
8. 安全性-
.NET 提供了三種驗証模式:Windows 驗証,Form 表單驗証,以及 passport 驗証。
Windows 驗証適合在企業內部使用,因為使用 Windows 驗証需要在 Windows Server 內存有自己的帳號。而 passport 驗証目前需要向微軟註冊且需要繳 費,所以目前不太常被使用。在網站上最被常使用的就是表單驗証。在.NET 裡也有在表單驗証裡自設加密的資料,如 MD5 加密,可以設在你的登入密 碼等等較隱密的資料內,增加安全性。
2-2 .NET平台上資料庫存取技術介紹
在.NET 平台說到資料存取,不得不提到 ADO(ActiveX Data Object).NET,它 是.NET 各平台存取資料的一個橋樑。我們先由以下的圖來看看 ADO.NET 的架構:
圖 2.3 .net 平台資料存取架構圖
可以看出,ADO.NET 是建立在 ODBC、OLE DB 之上的一個資料存取模式,
不僅保有原本 ADO 可存取的資料,更加入 XML,使得.NET 平台的資料存取的種 類更加完整。不管是 Windows Form 或是 Web Form 只要呼叫 ADO.NET 物件即可 取得需要的資料。
ADO.NET 常使用到的 Namespace(命名空間)有:
z System.Data z System.SqlClient z System.OleDb z System.odbc z System.Xml
z System.OracleClient(在 ASP.NET 1.1 加入的新命名空間)
當然,SqlClient 與 OracleClient 是 ADO.NET 針對這兩個 DataBase 的資料存取做 特別最佳化,其他的就只能使用 OleDb 去存取資料庫。而在 ADO.NET 中延續 ADO 所使用的物件有以下幾個:
z Connection 物件-用來開啟,關閉對資料庫的連線
z Command 物件-用來下 SQL 指令到資料庫,傳回資料的物件
關於 ADO.NET 有以下三個重要的物件:
¾ DataSet - 針對一般資料、XML 資料和關聯式資料進行儲存、遠端處理和程
式設計。
¾ DataReader - 針對從 SQL Server 資料來源讀取順向資料流的資料錄。
¾ DataAdapter - 針對資料庫將資料送回 DataSet,以及整理資料。
接下來我們就一個一個介紹有關這些物件:
1. DataSet-離線資料庫
DataSet 其實就是在 Web Server 所維護的一些 XML 的資料檔,從資料庫中取出 資料以 XML 文件的方式傳入 Web Server,再由 Web Server 做管理的一個資料 集.。 DataSet 物件表示資料的快取,具有類似資料庫的結構,例如資料表、
資料行、關聯性和條件約束。
圖 2.4 資料、DataSet 與控制項繫結示意圖
雖然 DataSet 的行為非常像資料庫,但是重要的是,DataSet 物件不會直接與資 料庫或其他來源資料互動。這樣開發人員才能使用永遠一致的程式撰寫模型,而 不管來源資料所在的位置。來自資料庫、XML 檔案和程式碼的資料,或使用者 輸入項目都可以放置在 DataSet 物件中。所以,當 DataSet 做了變更時,它們可 以在更新資料來源之前被追蹤或驗證 。在一個 DataSet 裡可以包含許多的資料,
包括資料表,資料間的關係等等的資訊:
z Tables 集合-存放傳回的資料表,包含了 DataRow 集合與 DataColumn 集
合。
z Relations 集合-將 DataTable 之間的關聯存放在此集合內。
z ExtendedProperties 集合-用來傳放使用者自訂的資訊,如密碼,或建立時 間等。
2. DataAdapter
DataAdapter 物件可以當成 DataSet 和資料來源之間的橋樑。
圖 2.5 DataAdatapter 功能示意圖
在對 DataSet 做了變更之後,DataAdapter 物件會使用命令更新資料來源。使用
SqlConnection myConnection= new
SqlConnection("server=(local)\VSdotNET;Trusted_Connection=yes;database=northwind");
首先先建立 connection,連線字串是存取 local 端的 VSdotNET 的 Server 資料庫是北風資料庫。
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter("select * from customers", myConnection);
建立 DataAdapter,把要使用 SQL 命令及使用的連線加入即可回傳資料。
接下來只要使用 DataSet 的 Fill 方法把 DataAdapter 傳回的資料接收即可。
使用 StoreProcedure:
預存程序是一種很常用的方式,可以讓程式設計者與資料庫管理者分工合作,
而且在後端執行比建立連線後下多次的 SQL 命令更來得有效率。
圖 2.6 Asp.net 執行預存程序與資料繫結流程圖 我們來看 ASP.NET 是如何寫的。
mySqlDataAdapter.InsertCommand.CommandText = "sp_InsertCustomer";
加入我們要使用的 StoreProcedure 名
mySqlDataAdapter.InsertCommand.CommandType = CommandType.StoredProcedure;
把 Adapter 的 CommandType 改成執行資料庫端的 StoreProcedure 而非 Text。
mySqlDataAdapter.DeleteCommand.CommandText = "sp_DeleteCustomer";
mySqlDataAdapter.DeleteCommand.CommandType = CommandType.StoredProcedure;
mySqlDataAdapter.UpdateCommand.CommandText = "sp_UpdateCustomers";
mySqlDataAdapter.UpdateCommand.CommandType = CommandType.StoredProcedure;
DataAdapter 物件共有三種指令,Insert,Delete,Update,只要依序將所需要的 動作將其填入 DataAdapter 內,當發生新增刪除修改的事件時,DataAdapter 會找 尋其相對應的方法去執行。
3. DataReader
DataReader 的運作方式是利用將資料傳回 DataSet,再從 DataSet 內一筆一筆的 顯示資料。這種方式不用一次又一次的和資料庫連線,也可以一次只取得一 筆資料並顯示在表單中。適合在只回傳資料表中的其中一筆記錄時,或當需 要顯示唯讀資料時,如在 Web 網頁展示一些資料時可使用。DataSet 並不能直 接顯示在網頁或是表單程式中,所以需要加入控制項以達成資料繫結
(DataBinding)的目的,共分為兩種類型-
I. 簡單的資料繫結:將控制項繫結到一個單一的資料元素,如 DataSet 中某資料表某欄位的值,連結到 Lable 或是 TextBox 上。
例如我們將 DataReader(reader)中的姓名部分(Name)在第0個位置,和 Label 控制項(lblName)繫結:
lblName.Text = reader.GetString(0);
II. 複雜的資料繫結:將控制項繫結到多個資料元素,如 DataGrid,DataList 等,需要多個欄位或是多個資料表單互相配合的一種繫結方式,我們 也只要使用 DataBinding 的方法把資料由 DataSet 傳送至控制項,就會 把資料依照我們需要的方式顯現出來了。
DataList.DataSource = DataSet.DefaultView
第三章 系統實作
Memory:512MB Hard Disk:40G
Web 伺服器 Microsoft Internet Information System
( IIS ) 6.0
資料庫伺服器 SQL Server 2000 Sp3
主機作業系統 Microsoft Windows Server 2003
系統開發工具 Microsoft Visual Studio.net 2003
表 3.1 系統開發環境與工具
圖 3.1 網站初版首頁
圖 3.2 網站初版討論區
圖 3.3 網站初版討論區內容
3-2 Hurricane與Asp.net Forum 簡介
3-2.1 Hurricane入口網站介紹與分析
Hurricane 入口網站(http://www.projecthurricane.net)是一個以學生社群為主題所 設計的網站。以這個網站為架構也是因為這個網站具有大部分我所需要的功能。
網站在 1.0 版的功能有:
z 新聞發佈與管理功能。
z 活動發佈與管理功能。
z Blog(網路日誌)。
z 討論區的功能。
z 專欄文章發佈、評分、討論功能。
z 資源下載、討論功能。
z 投票功能。
z 其他站台管理功能。
圖 3.4 Hurricane 網站首頁
經過安裝以及實際操作後,我整理了資料表與網站類別的架構,以下是使用 Reverse Engineering 的方式把資料庫的資料表,索引與關聯性顯示的結果:
圖 3.5 Hurricane 的資料表[1](Blog 部分)
圖 3.6 Hurricane 的資料表[2](使用者部分)
圖 3.7 Hurricane 的資料表[3](新聞,文章,資源下載部分)
3-2.2 Asp.net Forum介紹與分析
Asp.net Forum 論壇系統是由微軟線上社群 www.asp.net 的 Asp.Net Forum Team 所設計的。以許多外面的 PHP 論壇系統的功能為基礎,發展.net 平台 的論壇程式。現在的版本是 1.2 版,而 2.0 版(http://forums.asp.net/Forums/)也 已經在測試中,加入了表情、MSN Messenger 是否登入等等更棒的功能。除 了多樣化的功能外,在管理上 Asp.net Forum 也提供了許多方便的介面,讓管
理者可以指派版主、自定管理層級、自定使用者角色以進入需經授權的討論 版等,可以說是功能非常完備。而在台灣也已經有人將這個系統中文化,也 省去了需要中文化的工夫,現在只要分析如何整合即可。
圖 3.8 Asp.net Forum 論壇系統
我也使用 Reverse Engineering 的方式把資料庫關聯性顯現出來,做為系統整 合方法的重要資料。以下是 AspNetForum 的資料表及關聯: