新聞中心
#T#學(xué)習(xí)了這么多關(guān)于編程的知識(shí),在這里為大家簡(jiǎn)單的分析一下關(guān)于ADO.NET對(duì)象吧。幾個(gè)ADO.NET對(duì)象都擁有一個(gè)叫做ExtendedProperties的集合。該屬性就像收集貨物(cargo collection)一樣,可以用來(lái)存儲(chǔ)任何類型的用戶信息。DataSet、DataTable和DataColumn就是可以提供該數(shù)據(jù)成員的類。ADO.NET通過(guò)運(yùn)用 PropertyCollection類封裝的一個(gè)哈希表來(lái)實(shí)現(xiàn)這個(gè)ExtendedProperties屬性。你可以用Add方法將數(shù)據(jù)插入到集合中。 Add方法使用了兩個(gè)參數(shù)來(lái)保存數(shù)據(jù)——key和value.該方法的原形將參數(shù)定義為通用的對(duì)象類型,你可以存儲(chǔ)任何類型的信息。然而,在特殊情況下,你應(yīng)該特別注意那些被保存為擴(kuò)展屬性的對(duì)象的類型,下面我們來(lái)深入的研究一下吧。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的淄川網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
如果你想將包含擴(kuò)展屬性的ADO.NET對(duì)象串行化到XML,***只用字符串。如果不行,你必須對(duì)ADO.NET的內(nèi)在的serializer的行為采取對(duì)策。當(dāng)ADO.NET將一個(gè)DataSet對(duì)象保存到XML時(shí),ExtendedProperties集合的內(nèi)容就被串行化到內(nèi)存中了,但大概是出于性能的原因,ADO.NET運(yùn)用了ToString方法,而不是XML serializer來(lái)實(shí)現(xiàn)串行化。更重要的是,當(dāng)ADO.NET對(duì)象被讀回并復(fù)原時(shí),ExtendedProperties集合包含的是對(duì)象的字符串表現(xiàn)形式,而不是對(duì)象本身。
運(yùn)用具有BLOB字段的ExecuteXmlReader
用于SQL Server的。NET數(shù)據(jù)提供者(data provider)使用了數(shù)據(jù)庫(kù)提供的XML擴(kuò)展名,并提供了一個(gè)額外的方法(ExecuteXmlReader)來(lái)執(zhí)行查詢。命令對(duì)象上的所有的執(zhí)行者(例如ExecuteReader和ExecuteScaler)都采用不同的方法來(lái)得到結(jié)果集。ExcecuteReader通過(guò)一個(gè)托管指針(managed cursor)(data reader)來(lái)返回?cái)?shù)據(jù),而ExecuteScaler返回結(jié)果集中的***個(gè)值,把它作為一個(gè)標(biāo)量值。ExecuteXmlReader執(zhí)行查詢,并返回已經(jīng)綁定到一個(gè)XmlTextReader對(duì)象的基于XML的輸出流。通過(guò)這種方式,你就不需要做額外的工作來(lái)以XML的方式加工數(shù)據(jù)了。要實(shí)現(xiàn)這一點(diǎn),查詢字符串必須返回XML數(shù)據(jù)。對(duì)SQL Server來(lái)說(shuō),當(dāng)查詢字符串包含一個(gè)FOR XML子句時(shí),就可以實(shí)現(xiàn)它。盡管這只是一種可能。
一個(gè)不太為人所知的情況是,要使ExecuteXmlReader工作,讓結(jié)果集包含XML數(shù)據(jù)就足夠了。下面的查詢方法很好,只要列包含XML格式的文本就行:SELECT data FROM table WHERE key=1這個(gè)列是個(gè)典型的BLOB或ntext字段,其文本顯示為XML.簡(jiǎn)要地看看ExecuteXmlReader方法的內(nèi)部結(jié)構(gòu)會(huì)有助于我們的理解。該方法用ExecuteReader來(lái)執(zhí)行查詢,并從數(shù)據(jù)提供者得到一個(gè)數(shù)據(jù)流對(duì)象。接下來(lái),它將數(shù)據(jù)流綁定到XmlTextReader類的一個(gè)新創(chuàng)建的實(shí)例上,這個(gè)實(shí)例被返回給調(diào)用者。連接一直處于忙碌狀態(tài),直到XML reader停止工作。SQL Server提供者是唯一的提供者,它提供了方法讓我們從一個(gè)XML reader直接讀取數(shù)據(jù),但這種做法更多的是與提供者有關(guān),而與數(shù)據(jù)庫(kù)性能的關(guān)系并不大。Oracle支持XML查詢,但Oracle的數(shù)據(jù)提供者并不支持XML查詢。相比之下,為OLE DB數(shù)據(jù)提供者編寫一個(gè)ExecuteXmlReader方法并不難(點(diǎn)此下載實(shí)例)。
不要設(shè)法緩存一個(gè)DataView
DataSet和DataTable對(duì)象是唯一的包含數(shù)據(jù)的ADO.NET對(duì)象。DataView是一個(gè)不能串行化的、輕量級(jí)的類,它只代表構(gòu)建在一個(gè)表上的視圖(view)。你可以根據(jù)一個(gè)表達(dá)式或行的狀態(tài)來(lái)過(guò)濾視圖。許多應(yīng)用程序都需要你管理數(shù)據(jù)視圖并將它們綁定到數(shù)據(jù)控件上,如Windows和Web DataGrid控件。一個(gè)DataView對(duì)象不能緩存數(shù)據(jù);它只是緩存了與當(dāng)前過(guò)濾器相匹配的基本的表中的行的索引。緩存索引的順序與當(dāng)前的排序表達(dá)式一致。緩存DataView而不緩存基本的DataTable是不行的。
例如,提供分頁(yè)(比如通過(guò)運(yùn)用DataGrid控件)的ASP.NET應(yīng)用程序通常以一個(gè)DataView對(duì)象結(jié)尾,因?yàn)樗С峙判蚝瓦^(guò)濾。在有些情況下(大多是基于性能的原因),你可能決定要緩存數(shù)據(jù)源。要緩存的對(duì)象不能是DataView(它是你實(shí)際綁定的對(duì)象)。一個(gè)DataView只是一種索引,如果沒(méi)有基本的DataTable對(duì)象,它是沒(méi)有用的。
網(wǎng)站標(biāo)題:初學(xué)者別看篇:ADO.NET對(duì)象
當(dāng)前鏈接:http://m.fisionsoft.com.cn/article/djpphsd.html


咨詢
建站咨詢
