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