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