查詢ADO構(gòu)造進行學習切磋
本系列課程我們將會從ADO構(gòu)造的各個角度出來,來講述ADO構(gòu)造發(fā)布以后的全新功能,這主要包括C#3.0,VB9.0,WCF,WPF,WP,LINQ,AJAX,mobile開發(fā),Cardspace,智能客戶端。
在構(gòu)造查詢的時候,要搞清楚為什么必須這么做、為什么不能那么做是一個很復雜的問題。然而,一些基本的指導方針能夠讓構(gòu)造高效查詢的過程更加流暢、輕松。一般地,你不應該讓查詢浪費服務器時間。下面幾個技巧能夠幫助你構(gòu)造出更好、更高效的查詢。
不要強制ADO構(gòu)造每次執(zhí)行查詢的時候重新編譯和構(gòu)造查詢執(zhí)行計劃。避免這種重復操作的一種簡單方法是使用帶有參數(shù)的存儲過程。注意盡量不要使用ADO Command對象的Prepare屬性——有時它不能正確工作。如果使用存儲過程,你還可以通過消除不必要的“受影響行數(shù)”返回值進一步提高ADO性能——只需在存儲過程中加入SET NOCOUNT ON就可以了。
盡量減少與服務器的通信次數(shù)。如果你有幾個相關(guān)的操作要執(zhí)行,請把它們合并為一個存儲過程,或者是一個可以在服務器上作為腳本執(zhí)行的復合查詢。ADO構(gòu)造避免使用方法(比如Refresh)和不適當?shù)腜arameters集合引用,ADO構(gòu)造會強制ADO增加額外的服務器通信過程。#t#
在客戶機/服務器應用中,只構(gòu)造Command對象一次,而不是每次使用Command對象的時候重新構(gòu)造。你可以重新設置Command的參數(shù)值,然后在需要時執(zhí)行它。
當查詢返回的不是一個記錄集時,確保使用了adExecuteNoRecords選項,告訴ADO越過所有那些用來接收和構(gòu)造記錄集(Recordset格式)的代碼。ADO構(gòu)造你可以把adExecuteNoRecords選項傳遞給Execute方法,或把它作為Command的選項。
執(zhí)行返回簡單記錄集的存儲過程時,不要使用Command對象。所有的存儲過程(以及Command對象)可以作為Connection對象的COM方法出現(xiàn)。讓存儲過程作為Connection對象的方法出現(xiàn)有著顯著的性能優(yōu)勢,同時它也簡化了代碼。
盡管這種技術(shù)對于那些有Return Status值或Output參數(shù)的存儲過程沒有什么幫助,但對于動作查詢(INSERT、DELETE等)ADO構(gòu)造及那些返回一個或多個記錄的查詢來說,這種技術(shù)很有用。把存儲過程作為Connection的方法之后,你可以用方法參數(shù)的形式傳入存儲過程的輸入?yún)?shù);如果調(diào)用存儲過程返回了一個記錄集,你可以通過方法調(diào)用中***一個參數(shù)引用該Recordset。例如,下面的ADO構(gòu)造執(zhí)行一個名為“Fred”的存儲過程,F(xiàn)red存儲過程有兩個輸入?yún)?shù),返回一個Recordset: