闡述ADO語句執(zhí)行使用方法
進(jìn)行學(xué)習(xí)ADO語句當(dāng)有人為表增加了更多的列時(shí),你不會(huì)得到大得出奇的結(jié)果集,一些開發(fā)者使用延遲綁定技術(shù)的原因在于,他們想要明確地標(biāo)識(shí)出SELECT語句選擇了哪些行,不存在代碼引用的是哪一個(gè)列這類問題。如果你完全按照下列方式編寫代碼。
不要強(qiáng)制SQL Server每次執(zhí)行查詢的時(shí)候重新編譯和構(gòu)造查詢執(zhí)行計(jì)劃。ADO語句避免這種重復(fù)操作的一種簡(jiǎn)單方法是使用帶有參數(shù)的存儲(chǔ)過程。ADO語句注意盡量不要使用ADO Command對(duì)象的Prepare屬性——有時(shí)它不能正確工作。
如果使用存儲(chǔ)過程,你還可以通過消除不必要的“受影響行數(shù)”返回值進(jìn)一步提高ADO性能——只需在存儲(chǔ)過程中加入SET NOCOUNT ON就可以了。 盡量減少與服務(wù)器的通信次數(shù)。如果你有幾個(gè)相關(guān)的操作要執(zhí)行,請(qǐng)把它們合并為一個(gè)存儲(chǔ)過程,或者是一個(gè)可以在服務(wù)器上作為腳本執(zhí)行的復(fù)合查詢。ADO語句避免使用方法(比如Refresh)和不適當(dāng)?shù)腜arameters集合引用,ADO語句會(huì)強(qiáng)制ADO增加額外的服務(wù)器通信過程。#t#
在客戶機(jī)/服務(wù)器應(yīng)用中,只構(gòu)造Command對(duì)象一次,而不是每次使用Command對(duì)象的時(shí)候重新構(gòu)造。你可以重新設(shè)置Command的參數(shù)值,然后在需要時(shí)執(zhí)行它。 當(dāng)查詢返回的不是一個(gè)記錄集時(shí),確保使用了adExecuteNoRecords選項(xiàng),告訴ADO越過所有那些用來接收和構(gòu)造記錄集(Recordset格式)的代碼。你可以把a(bǔ)dExecuteNoRecords選項(xiàng)傳遞給Execute方法,或把它作為Command的選項(xiàng)。
執(zhí)行返回簡(jiǎn)單記錄集的存儲(chǔ)過程時(shí),不要使用Command對(duì)象。ADO語句所有的存儲(chǔ)過程(以及Command對(duì)象)可以作為Connection對(duì)象的COM方法出現(xiàn)。讓存儲(chǔ)過程作為Connection對(duì)象的方法出現(xiàn)有著顯著的性能優(yōu)勢(shì),同時(shí)它也簡(jiǎn)化了代碼。
盡管這種技術(shù)對(duì)于那些有Return Status值或Output參數(shù)的存儲(chǔ)過程沒有什么幫助,但對(duì)于動(dòng)作查詢(INSERT、DELETE等)以及那些返回一個(gè)或多個(gè)記錄的查詢來說,這種技術(shù)很有用。把存儲(chǔ)過程作為Connection的方法之后,你可以用方法參數(shù)的形式傳入存儲(chǔ)過程的輸入?yún)?shù);如果調(diào)用存儲(chǔ)過程返回了一個(gè)記錄集,你可以通過方法調(diào)用中最后一個(gè)參數(shù)引用該Recordset。例如,下面的ADO語句執(zhí)行一個(gè)名為“Fred”的存儲(chǔ)過程,F(xiàn)red存儲(chǔ)過程有兩個(gè)輸入?yún)?shù),返回一個(gè)Recordset: