新聞中心
掌握了一門(mén)技術(shù)的理論知識(shí)你未必可以很好的運(yùn)用它,因?yàn)樵趯?shí)際和理論還有一個(gè)過(guò)渡,這里我們就來(lái)看看怎樣更好的對(duì)ADO.NET運(yùn)用提高效果。用于SQL Server的.NET數(shù)據(jù)提供者(data provider)使用了數(shù)據(jù)庫(kù)提供的XML擴(kuò)展名,并提供了一個(gè)額外的方法(ExecuteXmlReader)來(lái)執(zhí)行查詢(xún)。命令對(duì)象上的所有的執(zhí)行者(例如ExecuteReader 和ExecuteScaler)都采用不同的方法來(lái)得到結(jié)果集。

#T#ExcecuteReader通過(guò)一個(gè)托管指針(managed cursor)(data reader)來(lái)返回?cái)?shù)據(jù),而ExecuteScaler返回結(jié)果集中的第一個(gè)值,把它作為一個(gè)標(biāo)量值。ExecuteXmlReader執(zhí)行查詢(xún),并返回已經(jīng)綁定到一個(gè)XmlTextReader對(duì)象的基于XML的輸出流。通過(guò)這種方式,你就不需要做額外的工作來(lái)以XML的方式加工數(shù)據(jù)了。要實(shí)現(xiàn)這一點(diǎn),查詢(xún)字符串必須返回XML數(shù)據(jù)。對(duì)SQL Server來(lái)說(shuō),當(dāng)查詢(xún)字符串包含一個(gè)FOR XML子句時(shí),就可以實(shí)現(xiàn)它。盡管這只是一種可能。
一個(gè)不太為人所知的情況是,要使ExecuteXmlReader工作,讓結(jié)果集包含XML數(shù)據(jù)就足夠了。下面的查詢(xún)方法很好,只要列包含XML格式的文本就行ADO.NET運(yùn)用見(jiàn)圖1:SELECT data FROM table WHERE key=1
圖1. ADO.NET運(yùn)用查詢(xún)XML數(shù)據(jù)
這個(gè)列是個(gè)典型的BLOB或ntext字段,其文本顯示為XML。簡(jiǎn)要地看看ExecuteXmlReader方法的內(nèi)部結(jié)構(gòu)會(huì)有助于我們的理解。該方法用ExecuteReader來(lái)執(zhí)行查詢(xún),并從數(shù)據(jù)提供者得到一個(gè)數(shù)據(jù)流對(duì)象。接下來(lái),它將數(shù)據(jù)流綁定到XmlTextReader類(lèi)的一個(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查詢(xún),但Oracle的數(shù)據(jù)提供者并不支持XML查詢(xún)。相比之下,為OLE DB數(shù)據(jù)提供者編寫(xiě)一個(gè)ExecuteXmlReader方法并不難(點(diǎn)此下載實(shí)例)。
網(wǎng)站標(biāo)題:ADO.NET運(yùn)用具有BLOB字段的ExecuteXmlReader
當(dāng)前鏈接:http://m.5511xx.com/article/dppsgeo.html


咨詢(xún)
建站咨詢(xún)
