運(yùn)用ADO.NET Find讀取記錄案例分析
學(xué)習(xí)ADO.NET時(shí),你可能會(huì)遇到DataTable的Select方法來(lái)運(yùn)行一個(gè)內(nèi)存中的查詢,或在視圖上設(shè)置一個(gè)過(guò)濾器來(lái)濾掉與指定標(biāo)準(zhǔn)不匹配的所有的記錄問(wèn)題問(wèn)題,一個(gè)內(nèi)存中的查詢,或在視圖上設(shè)置一個(gè),這里將介紹解決方案,在這里拿出來(lái)和大家分享一下??梢酝ㄟ^(guò)設(shè)置DataView類上的 RowFilter屬性來(lái)設(shè)置一個(gè)過(guò)濾器。這兩種方法都運(yùn)用相同的引擎來(lái)選擇記錄。它們可以接納一個(gè)表達(dá)式,對(duì)它進(jìn)行解析并求各個(gè)子句的值。
#T#DataTable的Select方法返回一個(gè)帶有所有相匹配的DataRow對(duì)象的數(shù)組。RowFilter屬性重建DataView的內(nèi)部索引來(lái)包含所有的(且僅包含)匹配的記錄。然后,應(yīng)用程序就可以訪問(wèn)記錄了。這兩種方法在性能上幾乎是一樣的;運(yùn)用哪種方法取決于環(huán)境和個(gè)人喜好。例如,如果你用的是數(shù)據(jù)綁定的控件,如一個(gè)DataGrid或DataList,那么RowFilter就很理想。如果你必須處理一串記錄,那么Select方法就更好了。
然而,你還可以用另一種方法(仍然是基于DataView的),它是讀取一個(gè)表中的記錄的最快的方法。該方法就是用ADO.NET Find:
- Dim view As DataView
- view = New DataView(table)
- view.Sort = "orderid"
- Dim index As Integer = view.Find(10248)
- Dim row As DataRow = view(index).Row
ADO.NET Find方法運(yùn)用了視圖的當(dāng)前索引,并將指定的值(或多個(gè)值)與形成當(dāng)前索引的字段匹配起來(lái)。在前面的代碼中,值10248與列orderid 匹配。如果Sort屬性為空,且DataTable對(duì)象有一個(gè)主鍵,那么就運(yùn)用主鍵中的列。ADO.NET Find方法返回的是相匹配的第一行的基于0的位置的值。
如果你想返回多個(gè)記錄,可以用FindRows的演變形式:
- view.Sort = "orderid, discount"
- Dim keys(1) As Object
- keys(0) = 10248
- keys(1) = 0
- Dim row As DataRow = _
- view(view.Find(keys)).Row
前面的代碼可以讓你通過(guò)運(yùn)用Find的重載方法(帶有一組對(duì)象)來(lái)匹配多個(gè)列的值。