日期:2013-09-12  浏览次数:20433 次

ADO+與資料控制元件


.NET Framework所提供的資料庫存取物件稱為ADO+(Active Data Object+),雖然有不少觀念與ADO相類似,但卻是全新的物件,為什麼已經有ADO了,還要再提供ADO+呢?筆者覺得原因可能有幾:
  • 採用XML做為資料交換格式:由於XML已經成為網際網路交換資料的標準,這是個不得不的舉動。
  • 延伸資料的範圍:在ADO底下,任何資料都必須透過OLD DB或ODBC來存取,ADO+ 並無此一限制,任何程式都可以藉助ADO+ 所提供的物件讓自己成為新資料格式的提供者,這因此延伸了可存取之資料的範圍。
  • 與資料控制元件的整合:以往我們撰寫ASP網頁時,最不方便的地方是資料庫內容的顯示,為了顯示資料庫的內容,大概必須藉助ADO的Recordset物件逐筆讀取資料錄,然後再逐筆將其顯示出來,程式較冗長,在ASP.NET網頁中,我們只要佈置好DataGrid、DataList或Repeater這一類資料控制元件,然後與ADO+ 進行繫結,DataGrid等控制元件就會自動顯示資料庫的內容。參閱圖-5及圖-6就是分別使用DataGrid及DataList控制元件顯示資料庫內容的網頁。

圖-5 http://www.kjedu.com.tw/kjaspx/ch01/AspxPage.aspx 網頁
圖-6 http://www.kjedu.com.tw/kjaspx/ch01/DataList.aspx

Cache與效能的提升


為了提升執行效能,ASP.NET網頁會先被編譯成MSIL儲存在硬碟中,而下次當該網頁再度被瀏覽時,就可以直接執行被儲存下來的MSIL(細節請參閱「執行效能的質疑」段落的說明),除了此一強化執行效能的動作之外,ASP.NET所提供的Cache(快取記憶體)功能亦可提升執行效能。ASP.NET提供的Cache功能分成Output Cache及Data Cache兩種。

Output Cache與網頁快取



圖-7 Output Cache與網頁快取

參閱圖-7,所謂Output Cache,是在執行MSIL之後,先將結果寫入Output Cache,然後再將Output Cache下傳到瀏覽器,而將來如果瀏覽同一網頁,ASP.NET會先判斷該網頁是否有Output Cache存在,如果有,則直接將Output Cache下傳到瀏覽器,不會經過編譯 .aspx及執行MSIL的過程,故能提升執行效能。
要啟用Output Cache的方法十分簡單,只要在 .aspx網頁的最前面加上以下標示即可:

<%@ OutputCache Duration="秒數" %>

其中Duration表示Output Cache保留在系統中的秒數,例如:

<%@ OutputCache Duration="10" %>

結果網頁的Output Cache將會保留在系統中10秒鐘,而凡是在這10秒內瀏覽此一網頁,ASP.NET就會直接將Output Cache下傳給瀏覽器,省略了編譯的動作。

Data Cache與資料快取


除了將整個網頁儲存於Output Cache之外,我們也可以將局部資料儲存於Data Cache(以下簡稱Cache)。Cache的用法與Application物件很類似,例如:

' 將資料或物件存放在Application物件中
Application("key1") = "這是字串"
Application("key2") = obj

' 將資料或物件存放在Data Cache中
Cache("key1") = "這是字串"
Cache("key2") = obj

不過筆者必須說明的是Data Cache所佔用的記憶體隨時可能會被釋放(視系統記憶體當時使用的情況),所以每當我們要讀取Data Cache時,要先判斷Cache("key") 是否等於Nothing,若不等於Nothing,表示Cache("key") 還存在於系統中,方可讀取。

提供偵錯工具


在撰寫程式的過程中,難免會有錯誤產生,如何除錯對任何一個程式設計師來說,都是很重要而且是無可避免的工作。ASP的偵錯工具十分欠缺,為了改善此一缺失,ASP.NET提供以下幾種偵錯方法:
  • 設定config.web的customerrors節區
  • 使用追蹤(Trace)功能
  • 偵錯工具程式(Debugger)

設定config.web的customerrors節區


當網頁產生錯誤而無法進一步編譯或執行時,ASP.NET會顯示如圖-8之畫面,此一畫面只告訴我們程式有錯,至於哪一行程式錯誤,則未顯示。為了讓ASP.NET顯示進一步的錯誤訊息,可在config.web檔案中增加customerrors節區的設定,如下:

<configuration>
<customerrors mode="off"/>
</configuration>

結果瀏覽之後可看到更詳細的錯誤指示畫面(如圖-9)
圖-8 ASP.NET網頁編譯或執行錯誤的畫面 (圖略)
圖-9 ASP.NET網頁編譯或執行錯誤的畫面(錯誤訊息較詳細)(圖略)

使用Trace追蹤功能


所謂Trace功能是在網頁的最前面加上以下標示:

<%@ Page Trace="True" %>

結果網頁被瀏覽之後,將會額外顯示一些資訊,如圖-10,而這些資訊有助於我們研判程式的狀況,做為偵錯時的參考。
圖-10 Trace功能啟用之後的網頁(圖略)
在圖-10畫面中,除了網頁正常顯示的內容之外,額外顯示的資訊可分成以下區段:
  • Request Details:透過Request方式向瀏覽器所讀取之資料。
  • Trace Information:事件發生或程式執行的過程。
  • Control Tree:網頁所使用之控制元件及控制元件之間的階層關係。
  • Cookies Collection:網頁所使用的Cookie。
  • Headers Collection:瀏覽器的表頭資訊。
  • Server Variables:Server變數,也就是我們可以透過Request. ServerVariables() 所讀取的資訊。

除了讓ASP.NET自動顯示以上訊息之外,我們也可以將程式執行過程中的資料顯示在Trace Information區段中,方法是呼叫Trace.Write或Trace.Warn,例如:

Trace.Write("UploadFile()", "進入UploadFile事件程序")
Trace.Warn ("UploadFile()", "進入For迴圈")

結果可將訊息輸出到Trace Information區段,供我們做為偵測程式的參考。

偵錯工具程式(Debugger)


ASP.NET提供的Debugger程式很像VB的操作介面,可以讓我們設定中斷點、逐步執行程式、觀察變數及堆疊的情況…等,是偵錯的利器。使用Debugger之前,須在config.web檔案中增加以下的設定:<