對於任何人來說,在學習之初,我們感覺困難的不是新知識的學習,而是新知識和舊知識極類似的部分。這樣,會讓我們感覺迷茫,極大的混淆了我們已有的知識經驗,對此我們會感到恐慌,所以,對於新舊知識的區別學習,是米老師一直強調的,也是我們迫切不要學習的。
現在要說關鍵了,ADO我們在一年前已經有所接觸了,一年後,霎間ADO.NET,慌了,這是什麼呢?和ADO有什麼區別呢?為什麼ADO還在正常工作時,我們還要學習心得Data Access Objects模型呢?不要著急,我們慢慢來看看,兩者究竟有什麼區別。
本文從以下幾點功能上,對ADO和ADO.NET的詳細比較:
1. 駐留記憶體的資料表示方式:
a) ADO:使用Recordset對象儲存單行資料,很像資料庫表;
b) ADO.NET:使用DataSet對象,該對象可以包含由DataTable對象表示的一個或多個表;
2. 多個表之間的關係:
a) ADO:需要對單個結果表中的多個資料庫表使用JOIN查詢來組裝資料,並提供階層記錄集,不過它們很難使用;
b) ADO.NET:支援DataRelation對象,將一個DataTable對象中的行和另一個DataTable對象中的行關聯起來;
3. 資料導航:
a) ADO:使用.MoveNext方法順序遍曆Recordset中的行;
b) ADO.NET:DataSet使用導航範例對一個表中的行進行無序訪問。對該資料的訪問類似於訪問集合或數組中的資料。這對於DataTable的Rows集合來說是可能的,它允許通過索引來訪問行。按照關係從一個表中的行導航到另一個表中的相應行;
4. 斷接訪問:
a) ADO:由Recordset提供,但必須顯式編碼。對於Recordset對象,在預設情況下是通過調用OLE
DB提供者來和資料庫通訊;
b) ADO.NET:對DataAdapter對象使用標準化的調用,來和資料庫通訊。該對象可以和OLE
DB資料提供者或直接與SQL Sever資料提供者通訊;
5. 可程式化性:
a) ADO:所有Recordset欄位資料類型都是COM Variant資料類型,並通常和資料庫表中的欄位名相對應;
b) ADO.NET:使用XML的強型別化的編程特徵。資料是自我描述的,因為代碼項名對應於代碼所處理的真實問題。DataSet和DataReader對象中的資料是強型別化的,使代碼更容易閱讀和編寫;
6. 共用各層間或組件間的中斷連線資料:
a) ADO:使用COM編組以發送中斷連線的資料集,它只支援由COM標準定義的資料類型。需要進行類型轉換,這要求使用系統資源;
b) ADO.NET:以XML格式發送DataSet。XML格式對資料類型沒有限制,不需要類型轉換;
7. 通過防火牆發送資料:
a) ADO:這對於ADO來說,比較成問題,因為防火牆通常用於防止系統級請求,如COM編組;
b) ADO.NET:ADO.NET支援這一功能,因為ADO.NET的DataSet對象使用XML,XML可以通過防火牆;
8. 延展性:
a) ADO:因為在ADO中,預設情況下是使用串連的Recordset對象、資料庫鎖定和活動資料庫串連,以長時間地爭奪有限的資料庫資源;
b) ADO.NET:對資料庫資料進行中斷連線的訪問,無需進行長時間地維護資料庫鎖定或者有效資料庫連接,沒有對有限的資料庫資源的爭奪。
理論還需在實踐中得到運用,在以後的項目使用中,相信我們會對此有更為深刻的理解。