明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

ADO.NET基礎(chǔ)

[摘要]簡介:本文主要討論了作為實(shí)現(xiàn)基本數(shù)據(jù)庫操作方法之一的ADO.NET,以及ADO.NET與ADO的基本比較  ADO.NET將成為構(gòu)建數(shù)據(jù)感知 .NET應(yīng)用程序的基礎(chǔ). 不同于ADO 的是,ADO.NET更具有通用性,不是那么專門針對數(shù)據(jù)庫而進(jìn)行的設(shè)計(jì). ADO.NET聚集了所有可以進(jìn)行數(shù)據(jù)處理的類...

  簡介:本文主要討論了作為實(shí)現(xiàn)基本數(shù)據(jù)庫操作方法之一的ADO.NET,以及ADO.NET與ADO的基本比較

  ADO.NET將成為構(gòu)建數(shù)據(jù)感知 .NET應(yīng)用程序的基礎(chǔ). 不同于ADO 的是,ADO.NET更具有通用性,不是那么專門針對數(shù)據(jù)庫而進(jìn)行的設(shè)計(jì). ADO.NET聚集了所有可以進(jìn)行數(shù)據(jù)處理的類.這些類呈現(xiàn)了具有典型數(shù)據(jù)庫功能的data container objects,比如:索引,排序,瀏覽.盡管ADO.NET是作為重要的.NET數(shù)據(jù)庫應(yīng)用程序的解決方案,它更多的顯示了涵蓋全面的設(shè)計(jì),而不僅是作為和ADO模型一樣的以數(shù)據(jù)庫為中心。.

  ADO .NET與ADO有很大的不同.它是一個全新的訪問編程模型.當(dāng)你開始使用ADO.NET時(shí),你會發(fā)現(xiàn)你所掌握的任何關(guān)于ADO的技能在搭建有效的程序以及解決難題方面對你都會有很大幫助,能夠幫你在解決問題上朝更靈活更穩(wěn)妥的方向發(fā)展.

  ADO.NET不是ADO為適應(yīng).NET基礎(chǔ)構(gòu)造而進(jìn)行改進(jìn)的版本.當(dāng)你慢慢了解了ADO.NET的語法,代碼設(shè)計(jì)以及移植后,你就會清楚了.

  1.NET中的數(shù)據(jù)訪問

  訪問ADO.NET中的數(shù)據(jù)源是由托管提供程序所控制. 雖然托管提供程序與OLE DB有兩處重大的不同,但是二者是極為類似的.首先, 托管提供程序在.NET環(huán)境下運(yùn)行,通過 DataReader 和DataTable .NET類來檢索和展示數(shù)據(jù).第二,它們的體系結(jié)構(gòu)都比較簡單,是因?yàn)闉榱诉m應(yīng).NET而進(jìn)行了優(yōu)化.

  此時(shí),ADO.NET分成兩種不同類型的托管提供程序:一種用于SQL Server? 7.0 或更高版本,另一種適用于所有你可能已經(jīng)安裝的OLE DB 提供程序.雖然運(yùn)用在兩種托管提供程序中的類是不同的,但它們卻都遵循相類似的命名方式.除開前綴之外,其它名稱都是相同的.前一種情況前綴為SQL, 后一種則是ADO.

  你需要利用SQL類來訪問SQL Server 表,因?yàn)镾QL類會跳過由OLE DB 提供程序呈現(xiàn)的中間層, 而直接進(jìn)入數(shù)據(jù)庫服務(wù)器內(nèi)部API. ADO類是位于OLE DB 提供程序頂端的.NET接口,利用COM Interop 橋來進(jìn)行工作.

  關(guān)于ADO.NET的入門知識,你可以讀讀Omri Gazitt's的文章,文章里主要介紹了ADO+:

  關(guān)于微軟..NET 框架的數(shù)據(jù)庫訪問服務(wù)(Data Access Services),而我的文章里關(guān)于ADO+的論述主要指出了數(shù)據(jù)種類的進(jìn)化.前者更純技術(shù)化,并提供了更高水平的關(guān)于ADO.NET編程模型的概述。后者主要是解釋ADO.NETR的目標(biāo),以及它與XML,腳本及其它技術(shù)的聯(lián)系.

  2.讀取數(shù)據(jù)

  ADO.NET應(yīng)用程序要從數(shù)據(jù)源里讀取數(shù)據(jù),首先得創(chuàng)建一個連接對象.這個連接對象可以是SQLConnection 或是 ADOConnection,這取決于所采用的目標(biāo)提供程序. 需要記住的是,雖然在這里不做推薦,但你也可以利用ADO .NET 類來連接到SQL Server數(shù)據(jù)庫. 這種方法唯一不足是,代碼需要通過一個不必要的額外代碼層. 首先它會調(diào)入ADO的托管提供程序, 然后ADO的托管提供程序再調(diào)用SQL Server OLE DB 提供程序. 如同OLE DB 提供程序做的一樣,SQL Server 托管提供程序會直接操作數(shù)據(jù),

  關(guān)于ADO 和ADO.NET在連接對象上最大的差別在于ADO.NET連接不支持CursorLocation屬性.與其說這是一個文檔BUG,還不如認(rèn)為這是一個備具爭議的設(shè)計(jì)問題.為強(qiáng)制執(zhí)行它的以數(shù)據(jù)為中心的基準(zhǔn),ADO.NET沒有游標(biāo)的顯示實(shí)現(xiàn).

  在ADO中,你已習(xí)慣于利用游標(biāo)將記錄從數(shù)據(jù)庫或其它OLE DB兼容的數(shù)據(jù)源中抽取, 你可以選擇客戶端或是服務(wù)器端游標(biāo),每種游標(biāo)都有幾個預(yù)先設(shè)定的游標(biāo)類型. 而在ADO.NET中更多的是從數(shù)據(jù)源中抽取數(shù)據(jù),并且為讀取和分析數(shù)據(jù)提供新的編程接口

  在ADO中,通過規(guī)定連接和命令文本,你可以創(chuàng)建一個Recordset 對象.對于游標(biāo)的位置和類型Recordset有一些規(guī)定.你可以按下面的方法來讀取數(shù)據(jù).

  在內(nèi)存中創(chuàng)建選定記錄的靜態(tài)副本,然后在斷開與數(shù)據(jù)源的連接時(shí)對副本進(jìn)行處理,ADO稱之為靜態(tài)游標(biāo).

  通過快速的, 僅向前的, 只讀游標(biāo)來滾動數(shù)據(jù),,ADO稱之為僅向前游標(biāo).

  通過服務(wù)器端游標(biāo)來訪問數(shù)據(jù),需要良好的連接,但您可以在不同層面上檢測由其它連線用戶輸入的信息,ADO稱之為: 動態(tài)游標(biāo).

  頭兩種都是在斷開的recordsets上進(jìn)行操作,并從客戶端緩存中讀取信息,另外,前兩種方式也常被用于面向WEB的環(huán)境中以及全新的 n-tier 系統(tǒng)當(dāng)中.

  在ADO中,以上所有這些方式與不同類型的游標(biāo)相對應(yīng) .在文中,你將會發(fā)現(xiàn),ADO.NET雖然與ADO不同,但它具備了ADO的所有功能.相對照來說,你的代碼將從實(shí)際的數(shù)據(jù)源及其物理存儲媒介和格式中抽取數(shù)據(jù).

  ADO.NET能夠使DataSet 和 DataReader 將數(shù)據(jù)從數(shù)據(jù)源中抽取出來.前者是記錄在內(nèi)存中的緩存,你可以從任意方向訪問并隨意作出修改. 后者是高度優(yōu)化的對象,在只讀紀(jì)錄集中以僅向前方式向前移動。注: DataSet 看起來象是靜態(tài)游標(biāo),但實(shí)際上,在.NET中,與ADO只讀游標(biāo)相對應(yīng)的是DataReader 對象.

  在ADO.NET中,雖然對于服務(wù)器端的游標(biāo)不提供任何支持,但這不意味著你就不能使用游標(biāo).實(shí)際上,你所需要做的步驟是在.NET中輸入ADO庫.你只需在references node上單擊右鍵,就可以在你自己的程序里運(yùn)行本地ADO 對象.

  但是我個人認(rèn)為,在你想轉(zhuǎn)向.NET時(shí),請慎重考慮. 首先,請務(wù)必完全輸入ADO, 這不會花費(fèi)太多時(shí)間和精力,這是向.NET邁出的第一步,.但是,這僅僅是萬里長征的第一步而且也是通向.NET必須的一步. .NET的真正附加值是基于一個均勻的,持續(xù)穩(wěn)定的接口以及本地classes的廣為應(yīng)用之上的.關(guān)于COM libraries是可以被支持的,合理的,但不被鼓勵的,因?yàn)樗鼉H僅是個短期解決方案,或者是一個過渡步驟.

  當(dāng)你要開始使用ADO.NET時(shí),請考慮這樣一個事實(shí):ADO.NET統(tǒng)一了數(shù)據(jù)容器類編程接口,.因此,不管是何種類型的程序: Windows Form, Web Form, 或者 Web Service也好,你都得在同一組類中集中處理有關(guān)數(shù)據(jù). 不管處于后端的數(shù)據(jù)源是SQL Server database,或是OLE DB 提供程序,, XML文件,又或是數(shù)組,你都可以使用一樣的方法和屬性來進(jìn)行處理.

Figure 1. Solution Explorer menu 

  如果你堅(jiān)持在.NET世界中使用ADO,那么請準(zhǔn)備好面對一些其它的影響,例如你需要額外的代碼才能夠從數(shù)據(jù)綁定控件中使用recordset.

  3.DataSet, DataTable, and Recordset

  關(guān)于Recordset object.,ADO.NET并沒有與其直接相對應(yīng)的對象.最接近的是DataTable 對象.雖然它們二者幾乎具有相同的功能,但它們在各自的框架里發(fā)揮著不同的作用.

  Recordset是一個相當(dāng)大的對象,具備ADO的大多數(shù)功能,但在某些方面仍有欠缺. Recordset在一些方面性能優(yōu)良,如:它具可創(chuàng)造性,它可以離線操作,功能眾多,但在一些方面仍需改進(jìn),如:基于其固有的COM特性, Recordset很難在網(wǎng)絡(luò)上連載; Recordset是一個二進(jìn)制的對象,因此不同平臺之間的模塊很難共享它;還有就是蛇不能夠穿過防火墻.另外,它表現(xiàn)的是記錄的單個表.如果該table作為一個或幾個JOIN的結(jié)果,那么它很難更新原始代碼源.當(dāng)你試圖將脫線的recordset與原始代碼源統(tǒng)一起來時(shí),數(shù)據(jù)源必須能夠識別SQL.不管如何,你的recordset可以由非SQL 提供程序創(chuàng)建.

  在ADO.NET中,ADO Recordset的所有功能被分拆成幾塊更簡單的對象:其中一個便是DataReader. DataReader模擬了快速,只讀,僅向前的只讀游標(biāo)的操作.

  DataTable,表現(xiàn)了數(shù)據(jù)源,是個簡單的對象. 你可以手動構(gòu)造一個DataTable,或者也可使用DataSet命令自動生成. DataSet對于它所包含的數(shù)據(jù)知之不多.通過它,你可以在內(nèi)存中處理數(shù)據(jù),或者是其它比如排序,編輯,篩選,創(chuàng)建瀏覽等工作.

  DataSet對象是一個數(shù)據(jù)容器類,是實(shí)現(xiàn)ADO.NET數(shù)據(jù)抽取的關(guān)鍵對象. DataSet集合了一個或幾個DataTable 對象. DataTable 通過如行,列這樣的通用集合,公開自身的內(nèi)容.當(dāng)你嘗試從數(shù)據(jù)表讀取數(shù)據(jù)時(shí),你也許正穿過了兩個不同的層面: DataTableMapping 和 DataView.

  DataTableMapping 對象包含了數(shù)據(jù)源中的數(shù)據(jù)列,以及DataTable object之間的映射關(guān)系.

  當(dāng)填充 DataSet 時(shí),DataSetCommand 對象要使用這個類。它維護(hù)數(shù)據(jù)集中的抽象列和數(shù)據(jù)源中的物理列之間的鏈接。

  表的視圖通過 DataView 對象實(shí)現(xiàn)。它表示 DataTable 的自定義視圖,可以綁定到特定控件(如 Windows 窗體和 Web 窗體中的數(shù)據(jù)網(wǎng)格)中。該對象相當(dāng)于 SQL CREATE VIEW 語句在內(nèi)存中的實(shí)現(xiàn)。

  DataSet中所有的表,通過一個公共的域,相互之間能產(chǎn)生關(guān)聯(lián).它們之間的聯(lián)系是由DataRelation 對象來進(jìn)行管理.這樣說起來挺象ADO的數(shù)據(jù)形成,但還是有一個最大的不同.

  在DataRelation里,你不需要使用數(shù)據(jù)形成語言,而且還可以獲得非常靈活的組織架構(gòu). 通過ADO .NET 導(dǎo)航模型,你可以很容易的從某一張表中的主行移動到它的所有子行里.

  DataRelation object是關(guān)于JOIN 語句在內(nèi)存中的實(shí)現(xiàn),可用于建立數(shù)據(jù)類型相同的的parent/child關(guān)系,. 一旦關(guān)系確立,任何破壞這種關(guān)系的修改都被禁止. Views和 relations是完成master/detail 架構(gòu)的兩個方法.請記住view僅是加載于記錄之上的掩碼, 但是relation

  是位于幾個列之間的動態(tài)鏈接,在relation下,你無法更改順序或是設(shè)置條件.

  如果你的代碼需要1對1的外鍵關(guān)系,而且更改數(shù)據(jù),最好不用JOIN命令.如果你需要額外的篩選功能,你可以尋求ADO .NET自定義視圖的支持.

  4.轉(zhuǎn)換現(xiàn)有代碼

  大量的ASP頁面使用ADO對象來抽取數(shù)據(jù).讓我們一起來回顧下幾例典型的案例,對你在以后處理移植或者改寫代碼時(shí)也許會有幫助。

  如果你有從單個recordset生成報(bào)表的ASP頁面,那么DataReader會是你的好幫手。

String strConn, strCmd;
strConn = "DATABASE=MyAgenda;SERVER=localhost;UID=sa;PWD=;";
strCmd = "Select * From Names where ID=" + contactID.Text;
SQLConnection oCN = new SQLConnection(strConn);
SQLCommand oCMD = new SQLCommand(strCmd, oCN);
oCN.Open();
SQLDataReader dr;
oCMD.Execute(out dr);
while (dr.Read()) {
// Use dr.GetString(index) or
// dr["field name"] to Response.Write data
}

  你可以利用HasMoreRows屬性來快速檢查是否DataReader為空.如果你僅僅只簡單處理一系列記錄,沒有什么比DataReader.更快,更好的對象了,它同樣適用于查詢單個記錄。

  DataReader.的內(nèi)容是不可編輯的,但你可以將內(nèi)容移動到更具管理功能的對象里,如:

   DataTable或是一個或多個DataRow 對象.

  當(dāng)你需要處理表與記錄二者之間的復(fù)雜關(guān)系時(shí),DataReader就不是合適的工具了。數(shù)據(jù)模型鏈接越多,SQL命令則會越復(fù)雜。導(dǎo)航模塊保有連續(xù)性,最后放入緩存的數(shù)據(jù)往往多于你所需要的,. DataSet 和 DataRelation objects是這種表關(guān)系模型的基礎(chǔ).

  為管理parent/child 關(guān)系,ADO同樣也對data-shaping engine進(jìn)行封裝. 總的說來, data shaping 和 ADO .NET 關(guān)系是一回事.就設(shè)計(jì)方面來說,二者幾乎沒有共同點(diǎn). Shaped recordsetsct嵌入列表對象中包括了所有數(shù)據(jù)表信息。ADO.NET關(guān)系是動態(tài)鏈接,你可以在兩個數(shù)據(jù)表間隨時(shí)建立. ADO依靠于Shaping OLE DB service 提供程序,并使用專門的SQL類語言特征以在執(zhí)行單個ADO命令的過程中生成一個分層的recordset.

  在 ADO.NET 中,關(guān)系中涉及的每個對象總是被看成單獨(dú)的個體。關(guān)系本身作為對象被公開,并且具有一定的行為規(guī)則。例如,DataRelation 對象可以從父行到子行一層層進(jìn)行更改。您可以通過將 ForeignKeyConstraint 對象添加到 DataTable 的 Constraints 集合中來進(jìn)行此操作。ForeignKeyConstraint 對象表示當(dāng)刪除或更新數(shù)值和行時(shí),對通過外鍵關(guān)系相關(guān)聯(lián)的一組列的約束。如前面提到的,一旦設(shè)置好了關(guān)系,在它按程序預(yù)設(shè)終止之前,您不能進(jìn)行可能破壞該關(guān)系的更改。

  正如早先提到的一樣,一旦設(shè)置了relationship,除非它是程序性的終止,你不能夠?qū)λM(jìn)行修改,那樣會使它突然中斷.

  另外, relations沒有遞延性.你可以在Customers 和Orders之間,Orders 和 Products之間設(shè)置兩個不同的關(guān)系.但是,當(dāng)為了某個customer而對orders導(dǎo)航時(shí),你不能夠從一個order跳到相關(guān)的products行.解決方法是,你必須另外打開Orders/Products 關(guān)系,鎖定你需要的order,然后獲取相關(guān)的行.

  程序員需要在ASP Session 對中存儲記錄嗎?通過ADO .NET 和 DataSet 對象,你可以非常安全的進(jìn)行工作,而不會引起在"Storing an ADO Recordset in GIT Might Cause An Access Violation"中所論及的麻煩.

  5.更新數(shù)據(jù)

  Web程序通常利用無程式語句或者通過參數(shù)代存儲過程來更新數(shù)據(jù).但是,當(dāng)遇見脫線的數(shù)據(jù)時(shí),你也許希望利用內(nèi)置服務(wù)來更新所有需要修訂的記錄.為完成這一工作.ADO提供了成批的更新機(jī)制.

  UpdateBatch 方法用于把保存在副本緩沖中的 Recordset 更改發(fā)送到服務(wù)器,以更新數(shù)據(jù)源。它采用開放式鎖定,允許所有掛起的本地更改。它還在單個操作中把所有更改傳送到數(shù)據(jù)源。僅當(dāng)更改提交后數(shù)據(jù)源鎖定要更改的記錄時(shí),才會出現(xiàn)開放式鎖定。開放式鎖定使兩個用戶可以同時(shí)訪問同一個記錄,但一個用戶輸入的更改很快會被另一用戶所覆蓋。當(dāng)然,這種方式要求數(shù)據(jù)源能夠檢測和防止數(shù)據(jù)沖突。還要求整個數(shù)據(jù)源比較穩(wěn)定,不會發(fā)生頻繁的更改。否則,不難想象協(xié)調(diào)費(fèi)用將很快超過替代嚴(yán)格鎖定所帶來的節(jié)約。事實(shí)上,使用 UpdateBatch 方法,在任何更改失敗時(shí)都會返回一個錯誤。然后,您可以通過 Errors 集合和 Error 對象來訪問該錯誤。

  要理解 ADO.NET 模型為什么是更新數(shù)據(jù)的更強(qiáng)大的工具,理解 ADO 中開放式鎖定的工作原理是非常關(guān)鍵的。在 ADO 代碼中,您無法控制調(diào)用 UpdateBatch 之后所發(fā)生的一切。也就是說,更新是在服務(wù)器上通過滾動已更改的行,然后比較原始值和數(shù)據(jù)源中對應(yīng)記錄中的當(dāng)前值來進(jìn)行的。當(dāng)所有的值都一致了,才對表執(zhí)行適當(dāng)?shù)?SQL 語句(INSERT、UPDATE 或 DELETE)。

  以上陳述說明了你還不能夠控制SQL 語句。位于服務(wù)器端的更新 代碼既不會比你自己寫的好,也不會在你采用的非SQL 提供程序的情況下運(yùn)作。在本章節(jié)的開始部份,我已經(jīng)講了Web應(yīng)用程序是典型的通過參數(shù)化存儲進(jìn)程來更新數(shù)據(jù)的過程。不管如何,如果你用批更新,情況就會有所不同.

  在ADO.NET中, 模型已被擴(kuò)展開來.現(xiàn)在,它采用更為通用的架構(gòu),通過它你可以規(guī)定你自己關(guān)于基本運(yùn)算的命令語句,如插入,刪除,更新以及選擇. 更明顯的,你可以觀察到從數(shù)據(jù)源里提取數(shù)據(jù)的企圖,并且不管數(shù)據(jù)源的本性,可以提供相同的支持.ADO.NET中的批更新,要求你創(chuàng)建一個DataSetCommand 對象: SQLDataSetCommand 或者ADODataSetCommand

  注: 在Beta 2中, DataSetCommand對象被稱為DataAdapter 對象.

  一旦你采用了DataSetCommand對象,你可以使用它的Update 方法. DataSetCommand提供了一系列屬性:如InsertCommand, DeleteCommand, UpdateCommand, and SelectCommand.它們都是Command對象,但你不能夠?qū)λ鼈冞M(jìn)行設(shè)置,除非缺省設(shè)置沒有按你的要求完成.這與ADO中一樣.在Update過程中,如果沒有設(shè)置xxxCommand屬性,但是主關(guān)鍵字已經(jīng)存在內(nèi),則會自動生成Command對象.

  以下代碼展示了如何為EmployeesList table設(shè)置主關(guān)鍵字,

DataColumn[] keys = new DataColumn[1];
keys[0] = m_oDS.Tables["EmployeesList"].Columns["EmployeeID"];
m_oDS.Tables["EmployeesList"].PrimaryKey = keys;

  主關(guān)鍵字基本上是是DataColumn對象的一個數(shù)組.

  如果你想利用存儲過程來更新表單,或者你利用專用非SQL 數(shù)據(jù)提供程序進(jìn)行操作,那么你將會常常用到這 些命令屬性.

  6.XML的延展支持功能

  在ADO中,XML僅僅只是作為輸入和輸出格式.但是,在ADO.NET中,XML作為數(shù)據(jù)記錄格式為你提供了一系列的方法,如: manipulating, reorganizing, sharing, and transferring. 任何你輸入進(jìn)到DataSet中的數(shù)據(jù),不管是不是原創(chuàng),都能夠通過雙面編程模型進(jìn)行處理.

  如同XML文檔一樣,DataSet 讀取/書寫數(shù)據(jù)和模式。數(shù)據(jù)和模式在HTTP中是可轉(zhuǎn)移的,也可以在任一支持XML的平臺上運(yùn)行。相同的數(shù)據(jù)在不同的時(shí)間段通過不同的模式可以被執(zhí)行。你利用ReadXmlSchema來書寫模式。 XML模式包含了data set中tables 的名稱,如同data set 中的relations 和 constraints一樣。在調(diào)用ReadXmlData之前你應(yīng)該完成這個步驟

  以下代碼示例是一個顯示可更新數(shù)據(jù)表的最簡單的 ASP.NET 頁面。

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.IO" %>

<script runat="server" language="C#">
void Page_Load(Object source, EventArgs e)
{
DataSet data = new DataSet();

// Loads XML data and schema
StreamReader sr;
sr = new StreamReader(Server.MapPath("data.xml"));
data.ReadXml(sr);
sr.Close();

// Add a new record passed through the URL
if (Request.QueryString.Count >0)
{
DataTable dt = data.Tables[0];
DataRow dr = dt.NewRow();
dr["FirstName"] = Request.QueryString["First"];
dr["LastName"] = Request.QueryString["Last"];
dt.Rows.Add(dr);
dt.AcceptChanges();

StreamWriter sw;
sw = new StreamWriter(Server.MapPath("data.xml"));
data.WriteXml(sw);
sw.Close();
}

// Refreshes the UI (made of a grid)
grid.DataSource = data.Tables[0].DefaultView;
grid.DataBind();
}
</script>

  如圖 2 所示,您可以將新的行添加到表中。然而,它不涉及 SQL Server 或 Access 表。它只是一個 XML 文件,在處理它的代碼中,沒有使用 XML 節(jié)點(diǎn)或 XMLDOM 方法。您可以用相同的直觀數(shù)據(jù)表接口來讀取和更新 XML 記錄。您的工作方式與在 ADO 中大致相同,但此處的模型更深入、更龐大,有更多的潛力供您去發(fā)掘。


    Figure 2. Example of an updateable table 

 

  7.結(jié)論

  Web 應(yīng)用程序的成功改變了典型分布式系統(tǒng)的面貌,F(xiàn)在大多數(shù)分布式系統(tǒng)都是 n 層系統(tǒng),這類系統(tǒng)對擴(kuò)展性和互操作性的要求越來越高。因此,非連接數(shù)據(jù)處理和 XML 成為最佳實(shí)踐,并為業(yè)界廣為接受。

  ADO.NET試圖將一些現(xiàn)有的在.NET旗下最好的精華都統(tǒng)成為一體.對于數(shù)據(jù)訪問的所有的編程模式就綜合性的,并是非常強(qiáng)大的.也許該模式不能一一滿足你的每個要求,但它朝模式設(shè)計(jì)方向跨出了一大步,不管如何,請記住ADO.NET只是一個測試版,而且只有有限的文檔支持.

  ADO程序員從該測試版中將會受益非淺,因?yàn)樗麄円呀?jīng)熟悉了關(guān)于ADO.NET的方方面面,包括關(guān)于abstraction的最高層次-- inspiring 模型. ADO.NET代碼與現(xiàn)有的ADO代碼并不兼容,但是功能卻近似. 為完全發(fā)揮ADO.NET 的優(yōu)勢,與其只是簡單的計(jì)算出最快的方式來放置代碼,還不如實(shí)實(shí)在在的弄清楚ADO.NET它本身的要領(lǐng).不管如何,.你所選擇的NET編程模式-- Windows Forms, Web Forms, or Web Services,ADO.NET都會在數(shù)據(jù)存取方面幫你一把.




標(biāo)簽:ADO.NET基礎(chǔ)