3.DataSet, DataTable, and Recordset
關於Recordset object.,ADO.Net並沒有與其直接相對應的對象.最接近的是DataTable 對象.雖然它們二者幾乎具有相同的功能,但它們在各自的框架裡發揮著不同的作用.
Recordset是一個相當大的對象,具備ADO的大多數功能,但在某些方面仍有欠缺. Recordset在一些方面性能優良,如:它具可創造性,它可以離線操作,功能眾多,但在一些方面仍需改進,如:基於其固有的COM特性, Recordset很難在網絡上連載; Recordset是一個二進制的對象,因此不同平台之間的模塊很難共享它;還有就是蛇不能夠穿過防火牆.另外,它表現的是記錄的單個表.如果該table作為一個或幾個JOIN的結果,那麼它很難更新原始代碼源.當你試圖將脫線的recordset與原始代碼源統一起來時,數據源必須能夠識別SQL.不管如何,你的recordset可以由非SQL 提供程序創建.
在ADO.Net中,ADO Recordset的所有功能被分拆成幾塊更簡單的對象:其中一個便是DataReader. DataReader模擬了快速,只讀,僅向前的只讀游標的操作.
DataTable,表現了數據源,是個簡單的對象. 你可以手動構造一個DataTable,或者也可使用DataSet命令自動生成. DataSet對於它所包含的數據知之不多.通過它,你可以在內存中處理數據,或者是其它比如排序,編輯,篩選,創建浏覽等工作.
DataSet對象是一個數據容器類,是實現ADO.Net數據抽取的關鍵對象. DataSet集合了一個或幾個DataTable 對象. DataTable 通過如行,列這樣的通用集合,公開自身的內容.當你嘗試從數據表讀取數據時,你也許正穿過了兩個不同的層面: DataTableMapping 和 DataVIEw.
DataTableMapping 對象包含了數據源中的數據列,以及DataTable object之間的映射關系.
當填充 DataSet 時,DataSetCommand 對象要使用這個類。它維護數據集中的抽象列和數據源中的物理列之間的鏈接。
表的視圖通過 DataView 對象實現。它表示 DataTable 的自定義視圖,可以綁定到特定控件(如 Windows 窗體和 Web 窗體中的數據網格)中。該對象相當於 SQL CREATE VIEW 語句在內存中的實現。
DataSet中所有的表,通過一個公共的域,相互之間能產生關聯.它們之間的聯系是由DataRelation 對象來進行管理.這樣說起來挺象ADO的數據形成,但還是有一個最大的不同.
在DataRelation裡,你不需要使用數據形成語言,而且還可以獲得非常靈活的組織架構. 通過ADO .Net 導航模型,你可以很容易的從某一張表中的主行移動到它的所有子行裡.
DataRelation object是關於JOIN 語句在內存中的實現,可用於建立數據類型相同的的parent/child關系,. 一旦關系確立,任何破壞這種關系的修改都被禁止. Views和 relations是完成master/detail 架構的兩個方法.請記住vIEw僅是加載於記錄之上的掩碼, 但是relation
是位於幾個列之間的動態鏈接,在relation下,你無法更改順序或是設置條件.
如果你的代碼需要1對1的外鍵關系,而且更改數據,最好不用JOIN命令.如果你需要額外的篩選功能,你可以尋求ADO .Net自定義視圖的支持.