專家有效說(shuō)明ADO.NET運(yùn)行錯(cuò)誤與指點(diǎn)
下面就對(duì)ADO.NET運(yùn)行錯(cuò)誤進(jìn)行介紹說(shuō)明,導(dǎo)致DataSet對(duì)象包含一個(gè)數(shù)據(jù)集??梢詫ataSet對(duì)象視為許多DataTable對(duì)象(存儲(chǔ)在DataSet對(duì)象的Tables集合中)的容器。請(qǐng)有時(shí),開發(fā)人員可能希望訪問(wèn)一個(gè)運(yùn)行在中間層服務(wù)器上的組件,以獲取許多表的內(nèi)容。
這時(shí)不必重復(fù)調(diào)用該服務(wù)器以便每次從一個(gè)表中獲取數(shù)據(jù),而是可以將所有數(shù)據(jù)都封裝入一個(gè)DataSet對(duì)象之中,并在一次單獨(dú)調(diào)用中將其返回。但DataSet對(duì)象的功能絕不僅僅是作為多個(gè)DataTable對(duì)象的容器。
存儲(chǔ)在DataSet對(duì)象中的數(shù)據(jù)未與數(shù)據(jù)庫(kù)連接。對(duì)數(shù)據(jù)所做的任何更改都將只是緩存在每個(gè)DataRow之中。要將這些更改傳遞給數(shù)據(jù)庫(kù)時(shí),將整個(gè)DataSet回傳給中間層服務(wù)器可能并非一種有效方法??梢允褂肎etChanges方法僅從DataSet中選出被修改的行。通過(guò)這樣的方式,可以在不同進(jìn)程或服務(wù)器之間傳遞較少數(shù)據(jù)。#t#
DataSet還公開了Merge方法,該方法可作為GetChanges方法的一個(gè)補(bǔ)充。用于向數(shù)據(jù)庫(kù)提交更改的中間層服務(wù)器(它使用的是由Merge方法返回的較小DataSet)將會(huì)返回一個(gè)包含著新獲得數(shù)據(jù)的DataSet??梢允褂肈ataSet類的Merge方法來(lái)將兩個(gè)DataSet對(duì)象的內(nèi)容合并入一個(gè)DataSet之中。這個(gè)例子又一次表明在ADO.NET運(yùn)行錯(cuò)誤設(shè)計(jì)開發(fā)ADO.NET時(shí),一直將多層應(yīng)用程序作為考慮內(nèi)容之一。過(guò)去的微軟數(shù)據(jù)訪問(wèn)模型就沒(méi)有類似特性。
您可以創(chuàng)建DataSet對(duì)象,而且無(wú)須與數(shù)據(jù)庫(kù)ADO.NET運(yùn)行錯(cuò)誤通信就可以用信息填充DataSet對(duì)象的Tables集合。在以前的數(shù)據(jù)訪問(wèn)模型中,在本地添加新行之前,通常需要查詢數(shù)據(jù)庫(kù),然后將它們提交給數(shù)據(jù)庫(kù)。而使用ADO.NET,在準(zhǔn)備好提交新數(shù)據(jù)行之后才需要與數(shù)據(jù)庫(kù)通信。
DataSet類還有一些特性,利用這些特性可以將DataSet類寫入一個(gè)文件或一個(gè)內(nèi)存區(qū)域,或者從文件或內(nèi)存區(qū)域ADO.NET運(yùn)行錯(cuò)誤中讀出該類。您可以只保存DataSet對(duì)象的內(nèi)容,或只保存DataSet對(duì)象的結(jié)構(gòu),也可以兩者都保存。ADO.NET將此數(shù)據(jù)存儲(chǔ)為XML文檔。
由于ADO.NET與XML密切相關(guān),所以在ADO.NET的ADO.NET運(yùn)行錯(cuò)誤DataSet對(duì)象和XML文檔之間傳遞數(shù)據(jù)只是小事一樁。這樣就能夠利用XML的強(qiáng)大功能之一:輕松轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)的功能。例如,可以使用可擴(kuò)展樣式語(yǔ)言(Extensible Stylesheet Language,XSL)轉(zhuǎn)換模板將輸出到XML文檔的數(shù)據(jù)轉(zhuǎn)換為HTML。