在Web跨入編程時代之前
對於大多數IT管理者和顧問來說
數據訪問只是一個相對而言的問題
所有要用到的數據都必須自己准備好
人們主要關心的問題是選擇性能/價格比最好的數據庫服務器
系統涉及的所有模塊必須和服務器兼容
客戶機/服務器應用是這種兩層模型最典型的范例
隨著Web交互性的日益提高和應用的日益廣泛
對於第三層——中間層的需求也越來越突出
中間層是一個邏輯層
數據訪問組件通常就在這一層上
數據訪問組件是唯一有必要了解數據庫細節的代碼
同時
准備更換或者升級數據庫服務器時
數據訪問組件也是第一個需要修改的地方
接下來
三層系統模型發展成了Windows DNA——現在稱為Microsoft
NET服務器系統
Microsoft利用一個統一的模型進行數據訪問
這個模型注重的是內容
而不是數據格式和存儲媒介
它的具體表達方式建立在UDA(Universal Data Access
通用數據訪問)的基礎之上
而UDA正是激勵OLE DB體系發展的深層理念
為了提供一種通過VB和ASP COM組件方便地
無縫地訪問OLE DB功能的途徑
Microsoft設計了ADO
ADO
是用來支持OLE DB的第一個版本
在幾年之內
ADO發展到了
版本
增加和擴展了XML支持
使得經過擴展的ADO對象模型能夠匹配所有OLE DB改進功能(例如
對於OLE DB新增的Row和Stream對象
ADO
提供了類似的ADO配套功能)
一ADO 的核心功能超越了OLE DB 在多層系統中
隨著中間層組件的出現
如何為表現層提供最新數據這一問題也隨之出現
表現層怎樣訪問數據?連接怎樣打開?或者
我們是否應該維護一份脫機記錄(即
一些斷開連接之後仍舊能夠在表現層使用的數據庫記錄)?ADO
以及它的更高版本同時提供了對服務器端游標和脫機記錄集的支持(脫機記錄集是一種COM對象
它可以跨越網絡串行化
客戶可以下載它然後脫機使用)
服務器端游標代表著一個緊密結合的
保持連接的環境
在這個環境中我們總是維持著各個層之間的有效通道
只有結束時才拆除連接
與此相反
脫機記錄集是一個有狀態的對象
我們可以把它作為一個整體處理
且不必維持連接
脫機記錄集使用客戶端的靜態游標
能夠提供一個數據源的快照
對於那些只有讀取要求
且需要在各個系統層之間移動數據的應用程序來說
脫機記錄集是很理想的
今天
大多數Web應用程序要求在各個層之間傳輸數據
為了獲取這些數據
我們經常使用快速的
只能向前
游標
用XML編碼數據
然後通過網絡發送數據
避免了在Web服務器上維持會話狀態信息
在分布式環境中
數據庫連接是一種關鍵性的資源
以脫機方式工作保證了高可伸縮性
然而
Web是一把雙刃劍
Web讓我們連接到任何類型的聯機服務
而且能夠與它們進行交互
但是
Web也要求一定程度的互操作性
因為操作所涉及的各個服務可能運行在不同的軟件和硬件平台上
我們可以通過利用開放的標准
以及那些不注重私有權的技術——甚至是象COM+這類廣泛應用的私有技術
跨越不同的平台
今天
基於Windows的Web數據訪問應用程序利用了ADO豐富的
方便的編程接口
然而
ADO對象天生地定位在Windows平台上
ADO基於COM的本性使得記錄集很難在一個分布式
異種平台構成的環境中使用
另外
即使目標平台可能允許我們使用ADO記錄集
它也不具備最有效的機制
ADO
NET的DataSet和DataReader更有效
而且
如果沒有ADO
NET
有些時候我們還可以借助XML或純文本獲得高效率
為了在Web環境下傳輸數據
Microsoft對ADO記錄集進行了優化
但COM類型轉換仍舊是一個必不可少的步驟
因為COM的數據類型不可能總是匹配ADO記錄集的數據類型(例如
String類型必須轉換成BSTR類型)
由此
許多人把XML當成了粘合各個層的
萬能膠水
——不管涉及到了哪些平台
通常的做法是
先提取一個記錄集
把它保存為XML格式
然後傳輸結果數據流
讓接收者從這個XML數據流重新構造出記錄集供以後使用
隨著對協同工作能力和可伸縮性要求的提高
ADO不再是最理想的答案
因為它不是建立在XML的基礎上——但ADO
NET是
二ADO在Web環境中的不足 NET框架創立了一種取代COM和COM+的新組件模型
NET的提出是Microsoft成熟的組件技術的新戰略
雖然幾個關鍵性的COM特色不再在
NET中出現
但在某些方面
NET與COM編程仍舊很相似
因此
COM程序員將能夠方便地轉向
NET開發
ADO
NET是Microsoft特別為
NET框架設計的數據訪問層
它在很大程度上利用了
NET的優勢
為什麼
NET必須用一個新的數據訪問層來替代現有的
廣泛應用的數據訪問接口
比如ADO?現代Web應用系統必須具備客戶機/服務器應用和桌面應用的交互能力
Microsoft設計
NET的目標正是為了迎接設計現代Web應用系統的挑戰
同時
NET也利用了各種Web協議廣泛的
強大的連接能力和協同操作能力
在非Windows平台上
ADO記錄集不能直接使用
從而使得協同操作能力受到了限制
為了突破這個限制
我們要把記錄集轉換成XML格式
然後傳輸轉換得到的XML記錄集
在ADO
NET中
把數據轉換成XML以及通過網絡傳輸的操作得到了簡化和優化
另外
ADO對象模型中的每一個地方都體現了以數據庫為中心的思想
ADO把數據看成是一組來自數據源的記錄
而不是把數據看成一些獨立的信息
在ADO中
如果脫離了數據提供者用來保存和描述數據的結構
數據將不能獨立存在
三ADONET數據集和ADO記錄集 ADO
NET是從Web的角度對ADO進行檢討和改進
Microsoft對ADO
NET的設計嚴格地體現了其名字的含義
ADO
再加上
NET
ADO
NET自動連接網絡
致力於讓Web數據訪問變得更加簡單和高效
兩個功能使得這方面的增強成為可能
脫機記錄集
以及與生俱來的對XML的支持
由於采用了脫機記錄集方案
ADO
NET自然也就不再支持服務器端游標
ADO
NET天生就把記錄數據保存為XML文檔
把模式(Schema)和數據視為分離的
可替換的元素
如果你認為ADO早就提供了這些功能
它們並沒有什麼創新意義
那麼
ADO
NET還提供了其他許多新的功能
ADO
NET能夠使用連接的或者非連接的(脫機的)記錄集
具體由用戶選擇的游標類型和游標位置決定
ADO記錄集的本地存儲格式是ADTG文件格式(Advanced Data TableGram
高級數據表圖)
ADTG是一種Microsoft私有的二進制存儲模式
代表著記錄集在內存中的映像
XML是可替換使用的
確定的
詳細輸出格式
在ADO
NET中
我們可以斷開一個記錄集集合的連接
通過一個默認(但允許更改)的XML模式再現記錄集集合
在ADO
NET對象模型中
DataSet(數據集)是最重要的對象
一般地
一個DataSet對象就是一個記錄集的集合
ADO
NET框架提供了記錄集的所有數據庫功能
排序
分頁
過濾視圖
關系
索引
和主鍵
DataSet對象代表了一個在內存中的
有著豐富功能的數據緩沖區
DataSet對象也通過表組織數據
這些表與原始的數據源之間不存在連接
我們可以添加表
表可以通過讀取本地或遠程XML文件獲得
或者也可以從任何可訪問的系統資源(包括內存和其他附屬設備在內)讀取
我們可以排序
索引
過濾數據表
象處理ADO的Recordset一樣導航數據表
我們可以通過命令用數據集合填充DataSet對象
如果用
NET集合的形式為DataSet對象提供數據表(具有集合功能的
NET數據類型是ICollection)
同一個DataSet對象能夠服務來自多個連接的多個請求
ADO
NET的DataSet對象比ADO的Recordset更一般化
與ADO的Recordset不同
它是對數據源的一種抽象
然而
DataSet對象保留了一個在內存中工作的數據存儲器
它沒有完全淘汰記錄集功能
如果我們只需要一次性地滾動記錄集
然後生成某種輸出
那麼
我們應該使用DataReader對象
NET的DataReader對象類似於
只能向前
只讀
的記錄集
但它是一個高度專用化的對象
所以無論在體積和開銷上它都要比記錄集小
事實上
記錄集能夠執行許多不同的任務
是一個相當臃腫的對象
與ADO的Recordset相比
DataReader不包含進行
家務管理
的代碼
除了實現功能所必需的代碼之外
它不包含任何其他代碼
把多個表作為一個整體管理以及允許建立這些表之間的關系
這是ADO
NET的新功能
我們可以用XML形式持久化或傳輸任何DataSet對象
而且無需付出任何額外的代價
因為DataSet對象本身就是按照XML格式構造
因此
除非要修改底層模式
否則
我們無需為了獲得一個XML流而去轉換DataSet對象的任意一個部分
四ADONET對象詳解 ADO和ADO
NET有著兩個截然不同的對象模型
ADO定位在基於Windows
和NT的服務器平台
ADO
NET定位在支持
NET的平台
Microsoft預期在
年末推出第一個
NET OS——Windows XP(原來的代碼名字為Whistler)
不過
它的後繼產品(代碼名字為Blackcomb)更有可能提供一個全功能的
NET OS
如果要遷移代碼
我們可以把現有的ADO代碼導入到
NET應用之中
從而節省在編寫代碼方面的投入
然而
如果不做重大的設計調整
同樣的代碼幾乎不可能移植到ADO
NET
ADO和ADO
NET的對象模型不一樣
兩者在不同的設計指導思想下完成
ADO
NET只用來構造基於
NET服務器的Web應用
ADO
NET是
NET應用程序的數據訪問API
因此
只有把服務器升級到
NET之後
你才可以考慮ADO
NET
在同一個應用程序中
讓ADO和ADO
NET協同運作是沒有什麼意義的
雖然你可以同時使用這兩者(至少從設計的角度來看)
但這並不是一種好的選擇
ADO
NET的對象主要包括
DataSet
DataTable
DataColumn
DataRow
和DataRelation
這些對象的主要特點說明如下
▲ DataSet
這個對象是一個集合對象
它可以包含任意數量的數
From:http://tw.wingwit.com/Article/program/net/201311/13674.html