全面分析ADO.NET數(shù)據(jù)集類(lèi)型
ADO.NET數(shù)據(jù)集有很多值得學(xué)習(xí)的地方,這里我們主要介紹ADO.NET數(shù)據(jù)集類(lèi)型,包括介紹typed DataSet和untyped DataSet等方面。ADO.NET數(shù)據(jù)集類(lèi)型分為類(lèi)型化數(shù)據(jù)集和非類(lèi)型化數(shù)據(jù)集,關(guān)于對(duì)他們的描述請(qǐng)參見(jiàn)圖所示:

ADO.NET數(shù)據(jù)集類(lèi)型圖
使用類(lèi)型化數(shù)據(jù)集訪問(wèn)列,參見(jiàn)如下代碼:
- string employeeName;
- employeeName = dsEmployees.Emp[0].EmpName;
從dsEmployees數(shù)據(jù)集的Emp表中***個(gè)記錄返回EmpName列,然后將其存儲(chǔ)在employeeName字符串變量中。使用非類(lèi)型化數(shù)據(jù)集訪問(wèn)列 ,參見(jiàn)如下代碼:
- string employeeName;
- employeeName = dsEmployees.Tables["Emp"].Rows[0]["EmpName"];
使用Tables集合返回EmpName列。
小知識(shí):
typed DataSet和untyped DataSet
typed DataSet是從DataSet派生的,它根據(jù)事先定義的Data Schema生成數(shù)據(jù)集,對(duì)數(shù)據(jù)集中的字段實(shí)行強(qiáng)類(lèi)型約束。你可以通過(guò)它產(chǎn)生的cs文件看到許多方法對(duì)DataTable的操作進(jìn)行了封裝,這樣你就可以通過(guò)MyDataSet.MyTable.Field對(duì)字段進(jìn)行訪問(wèn),而不是像DataSet那樣:
MyDataSet.Tables["TableName"]["Field"]; 簡(jiǎn)化了編程,同時(shí)不容易出錯(cuò),想象一下如果在"Field"中拼錯(cuò)了字段名,那么編譯器也不會(huì)檢查出來(lái),對(duì)于typed DataSet就不用了,如果你Field寫(xiě)錯(cuò)的話,那么馬上就可以知道。
還有就是如果你在Typed DataSet包含多數(shù)據(jù)集,同時(shí)在XSD中對(duì)這些數(shù)據(jù)集建立關(guān)系和約束,那么Type DataSet會(huì)生成相應(yīng)的方法來(lái)反映這些關(guān)系和約束。如果使用untyped DataSet,你需要自己做。 性能上的考慮:雖然Typed DataSet創(chuàng)建對(duì)象實(shí)例的時(shí)候比unTypede DataSet要多一些開(kāi)銷(xiāo)(時(shí)間和空間),但是在填充數(shù)據(jù)的時(shí)候要比untyped DataSet快,這是因?yàn)镈ataAdapter已經(jīng)知道怎么Fill一個(gè)Typed DataSet,相比之下,DataSet需要兩次讀取數(shù)據(jù)庫(kù),***次取得數(shù)據(jù)庫(kù)中表的結(jié)構(gòu)信息,第二次才fill數(shù)據(jù)。
Typed DataSet相對(duì)于DataSet的缺陷:除了創(chuàng)建的開(kāi)銷(xiāo)之外,Typed DataSet不如DataSet靈活,因?yàn)門(mén)yped DataSet一旦確定,數(shù)據(jù)表的結(jié)構(gòu)就固定了,如果需要修改,必須重新生成。而DataSet你可以隨時(shí)根據(jù)需要進(jìn)行操作(比如添加字段,刪除字段等)。
【編輯推薦】