ADO.NET 巨集觀定義
傳統ADO主要針對緊密連線的客戶端/伺服器端系統,而 ADO.NET考慮到了斷開連線式應用並且引進了 Dateset 它代表任意數量的關聯表,其中每個表都包含了行和列的集合的本地副本。使用Dateset的話.在斷開資料庫連線的情況下呼叫程式集(如 web 頁面或者桌面可執行程式)處理和更新它的內容.然後使用關聯的資料介面卡把修改後的資料提交回資料庫。
ADO.NET 的三面
從概念上來說,ADO.NET類庫有三種完全不同的方式來實現資料訪問:連線式、斷開式和通過Entity 框架。
當使用連線式的時候,你的程式碼需要顯式連線或者斷開基層資料來源。用這種方式使用 ADO.NET時,通常會用到連線物件、命令物件和資料讀取器物件來實現這樣的資料互動。
另一方面,斷開式資料訪問允許通過一組DataTable物件(儲存在Dataset中)來獲取外部資料的一個客戶端副本;當你通過相關的資料介面卡物件來獲取Dataset 的時候,資料連線會自動開啟或關閉。你可能也猜到了,這樣能快速釋放連線以便其他呼叫者使用,也極大增加了系統的可伸縮性
一旦獲取了一個DataSet後.就能在不需要花費網路流量的情況下隨意修改內容。同樣.如果你想把修改後的結果重新提交回資料庫,需要再次使用資料介面卡物件(關聯一組SQL語句)來更新資料來源,此時連線會為資料庫更新重新開啟並在結束操作後會立即被關閉。
一個資料訪問API,叫做 Entity Framework (簡稱EF).藉助 EF 可以用封裝了大量資料庫底層細節的客戶端物件與關係型資料庫互動。同樣,EF程式設計模型還可以使用 LINQ to Entity 語法,用強型別的LINQ 查詢與關係劃資料庫互動。
ado.net資料提供程式
ADO.NET沒有提供單一物件集來和多個資料庫管理系統(DBMS)進行通訊.而是提供了多種資料提供程式.每種為某個DBMS進行優化,這種方法的好處是,一來能以程式設計方式利用DBMS獨有的一些特性,二來能直接和基層的DBMS引擎進行連線而不需要為不同的DBMS做中間的對映層。
簡單來說,資料提供程式是一組定義在用於和特定的資料來源型別進行通訊的名稱空間內的一組類
型。不管你用的是哪種資料提供程式.它們都有一系列類來提供核心功能。
AOO.NET資料提供程式的一些核心物件 | |||
物件 | 基類 | 實現的介面 | 作用 |
Connection | DbConnection | IDbConnection | 連線和斷開資料來源,提供了相關事務物件的訪問 |
Command | DbCommand | IDbCommand | 代表SQL查詢語句或者儲存過程名,同樣提供了相關資料讀取器物件的訪問 |
DataReader | DbDataReader | IDbDataReader和IDataReader |
提供只讀只向前形式的教據訪問 |
DataAdapter | DbDataAdapter | DbDataAdapter和IDataAdapter | 在資料庫和呼叫這之間傳遞DataSet,內建4個命令物件來實現教據的查詢、插入、修改和刪除操作 |
Parameter | DbParameter | IDataParameter和IDbDataParameter | 在引數化查詢中表示引數 |
Transaction | DbTransaction | IDbTransaction | IDbTransaction 實現資料庫事務 |
儘管這些類的命名對於不同的資料提供程式不盡相同(比如SqlConnection 和OracleConnection 、OdbcConnection 和MySqlConnection )。但是它們都從相同的基類(就連線物件而言,是DbConnection)繼承並且實現相同的介面(如 IDbConnection)。這樣的話.一旦你掌握了一種資料提供程式的用法.學習其他的資料提供程式就非常簡單了;
微軟提供的ado.net資料提供程式
由定義在system.Data.OleDb 名稱空間下的類組成的OLE DB 資料提供程式能讓你訪問所有支援基於傳統COM的OLE DB協議的資料庫。使用這個資料提供程式,能非常簡單地改變連線字串中的”Provider”,並能和各種OLE DB資料庫進行通訊。
需要知道的是,其實OLE DB資料提供程式在後臺呼叫各種COM物件來實現資料互動,這可能會影響程式的效能。基本上當某個DBMS沒有對應的.NET資料提供程式時,我們才會用OLE OB資料提供程式。然而,稱職的OBMS 都應該有自定義的ADO.NET教據提供程式提供下載。System.Data.OleDb應該被稱為遺留名稱空間
System.Data.Sqlclient名稱空間包含SQL server 資料提供程式的一些類,井且提供了和OLE DB資料提供程式差不多的一些功能.但是主要的區別是它繞開OLE DB層進行訪問。帶來的效率顯而易見。同樣,SQL server資料提供程式也能很好利用DBMS的一些特性