ADO.NET對象集合先關(guān)說明
本系列課程我們將會(huì)從ADO.NET對象的各個(gè)角度出來,來講述ADO.NET對象發(fā)布以后的全新功能,這主要包括C#3.0,VB9.0,WCF,WPF,WP,LINQ,AJAX,mobile開發(fā),Cardspace,智能客戶端。
如果要遷移代碼,我們可以把現(xiàn)有的ADO代碼導(dǎo)入到.NET應(yīng)用之中,從而節(jié)省在編寫代碼方面的投入。然而,ADO.NET對象如果不做重大的設(shè)計(jì)調(diào)整,同樣的代碼幾乎不可能移植到ADO.NET。ADO和ADO.NET的對象模型不一樣,兩者在不同的設(shè)計(jì)指導(dǎo)思想下完成。
ADO.NET只用來構(gòu)造基于.NET服務(wù)器的Web應(yīng)用。ADO.NET是.NET應(yīng)用程序的數(shù)據(jù)訪問API。因此,ADO.NET對象只有把服務(wù)器升級到.NET之后,你才可以考慮ADO.NET。在同一個(gè)應(yīng)用程序中,讓ADO和ADO.NET協(xié)同運(yùn)作是沒有什么意義的。雖然你可以同時(shí)使用這兩者(至少從設(shè)計(jì)的角度來看),但這并不是一種好的選擇。
DataSet:這個(gè)對象是一個(gè)集合對象,ADO.NET對象可以包含任意數(shù)量的數(shù)據(jù)表,以及所有表的約束、索引和關(guān)系。所有這些信息都以XML的形式存在,我們可以處理、遍歷、搜索任意或者全部的數(shù)據(jù)。圖1顯示了一個(gè)典型的DataSet對象的模式。在這個(gè)例子中,DataSet對象包含兩個(gè)表,ADO.NET對象其中一個(gè)表來自SQL Server,另一個(gè)表來自O(shè)racle。兩個(gè)表通過一個(gè)關(guān)系連接到一起,關(guān)系把源表的一組記錄和目的表的一組記錄關(guān)聯(lián)到一起(例如,主-細(xì)關(guān)系)。另外,一個(gè)XML表通過一對一(1:1)的關(guān)系關(guān)聯(lián)到了Oracle表。 #t#
DataTable:這個(gè)對象代表著可以在DataSet對象內(nèi)找到的所有表,如圖2所示。我們通過Tables屬性訪問DataTable的集合。類似地,通過DataSet的Relations屬性可以訪問到所有已經(jīng)建立的數(shù)據(jù)集關(guān)系。Xml屬性包含了對象原始的XML描述,.NET應(yīng)用程序可以從這個(gè)XML字符串重新構(gòu)造出數(shù)據(jù)集。
在ADO.NET對象模型的層次結(jié)構(gòu)中,DataTable對象與ADO的Recordset對象最接近。根據(jù)具體目的的不同,我們可以在數(shù)據(jù)集之內(nèi)或之外創(chuàng)建和使用表。另外,我們可以手工執(zhí)行命令——但首先必須定義表的模式——或者,依靠受管理數(shù)據(jù)提供者創(chuàng)建和填充表。(受管理提供者即Managed Provider,它是一種新的數(shù)據(jù)提供者類型,是ADO.NET中***直接訪問數(shù)據(jù)源的途徑。這種提供者封裝了一個(gè)數(shù)據(jù)源,通過Microsoft .NET類返回?cái)?shù)據(jù)。受管理提供者共用OLE DB的觀念,但它是經(jīng)過專用化的、優(yōu)化的,而且很容易使用。)
DataColumn:表包含與列有關(guān)的信息,包括列的名稱、類型和屬性。ADO.NET對象我們可以按照下面的方式創(chuàng)建DataColumn對象,指定數(shù)據(jù)類型,然后把列加入到表: