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自定義視圖的支持.