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