詳細(xì)解讀ADO操作相關(guān)操作
進(jìn)行ADO操作時(shí)需要注意相關(guān)的問(wèn)題,你還可以使用另外一種方法。vbdata-l@peach.ease.lsoft.com列表服務(wù)上一場(chǎng)長(zhǎng)時(shí)間的討論得出了一種我稱之為預(yù)先綁定(Prebinding)的方法,如果你對(duì)本文所討論的某一項(xiàng)技術(shù)感興趣
當(dāng)你只需引用Field對(duì)象一次時(shí),這種技術(shù)沒(méi)有什么幫助;但在客戶機(jī)/服務(wù)器應(yīng)用中,預(yù)先綁定方法非常理想。使用這種方法時(shí),你要?jiǎng)?chuàng)建多個(gè)獨(dú)立的、命名的Field對(duì)象,并把這些對(duì)象設(shè)置為Recordset對(duì)象Fields集合中的成員。編寫(xiě)代碼的時(shí)候,你首先要為每一個(gè)想要使用的字段創(chuàng)建一個(gè)命名的Field對(duì)象,例如:
在編寫(xiě)代碼的時(shí)候,你還必須考慮到其他一些影響性能的因素。其中一些因素與ADO沒(méi)有什么關(guān)系——它們與COM有關(guān)。Microsoft最近的一份白皮書(shū)指出,在Windows 2000 ASP頁(yè)面中執(zhí)行ADO操作(連接,查詢,處理)要比調(diào)用COM組件執(zhí)行同樣的代碼更快。
這個(gè)結(jié)論并不令人奇怪:當(dāng)我們從VB調(diào)用一個(gè)外部COM組件(處于當(dāng)前進(jìn)程之外的一些代碼),訪問(wèn)COM組件以及把控制傳遞給ADO操作時(shí)在后臺(tái)進(jìn)行的操作復(fù)雜得出奇,而且速度很慢。雖然我們沒(méi)有必要刻意避免調(diào)用COM組件去運(yùn)行ADO代碼。
但是,我們不應(yīng)該簡(jiǎn)單地把多個(gè)獨(dú)立的ADO操作封裝成大量的小型COM組件,然后在需要的時(shí)候每次都去調(diào)用它們。相反,ADO操作我們應(yīng)該盡量把全部邏輯封裝到一個(gè)COM組件里面,使得程序只需一次調(diào)用,COM就能夠完成大多數(shù)(如果不是全部)操作。
我相信,你已經(jīng)發(fā)現(xiàn)運(yùn)行二進(jìn)制形式的(例如COM組件)ADO代碼要比運(yùn)行ASP之類的解釋執(zhí)行代碼要快。因此,你應(yīng)該尋找一些方法,減少進(jìn)入COM組件和從COM組件返回所需要的昂貴開(kāi)銷。#t#
如果你離不開(kāi)Command對(duì)象,或者不能預(yù)先綁定Field對(duì)象并在必要時(shí)重用,那么你應(yīng)該考慮避免多余的對(duì)象創(chuàng)建操作的技術(shù)。在這種情況下,ADO操作把存儲(chǔ)過(guò)程作為Connection對(duì)象的方法調(diào)用有著更重要的意義。另外,用先行綁定的方式引用Field屬性也有助于改善性能。記住操作完成后必須進(jìn)行的清理工作:關(guān)閉Connection和Recordset對(duì)象,然后把它們?cè)O(shè)置成Nothing。
為了讓代碼和代碼編寫(xiě)者都表現(xiàn)出***的性能,請(qǐng)記住以下基本規(guī)則:利用連接池和異步連接;減少ADO代碼和數(shù)據(jù)庫(kù)服務(wù)器通信的次數(shù);選用一種COM-先行綁定技術(shù);除非必要,盡量避免使用代價(jià)昂貴的ADO操作,例如Recordset和Command對(duì)象;
如有可能,用Return Status和Output參數(shù)替代記錄集。盡可能地提高查詢的效率,如有可能,ADO操作不要忘了利用存儲(chǔ)過(guò)程。詳細(xì)地告訴ADO你想要它做些什么,避免讓ADO猜測(cè)你的意圖——顯式地指定ADO CommandType,使用adExecuteNoRecords之類的選項(xiàng)。