用Visual Basic訪問Oracle數據庫有許多方法可以實現,而每種方法都有其優缺點。你可以選擇最適合你工作環境的方法,首先你必須了解這些方法是什么。在這篇文章里介紹一些訪問Oracle數據庫的常見方法,對每種方法進行簡單的概述,并就每種方法的技術和特點進行比較,希望能給廣大讀者提供一些借鑒。 一、數據訪問對象(DAO) 數據訪問對象在很長一段時間內是Visual Basic訪問數據庫功能的主要技術。DAO已經存在了許多年并經歷了多次修改,但它依然是許多數據庫的對象模型。盡管DAO是數據訪問中最弱的一種,但它同時也是最為人所熟知的。盡管DAO模型存在局限,但它依然有許多大量的函數可供Oracle用戶使用,某些方面性能還可以令人接受的。 DAO是一項過時的技術,盡管它仍應用于許多程序,但與新技術相比,它存在一些明顯的缺點: ·DAO擁有的對象模型功能比較弱,在所有的數據庫訪問技術中它的功能最弱。 ·DAO被設計為適用于JET而沒有調整為適用于ODBC數據源。 ·DAO不適合處理大量不同類型的數據源。 二、遠程數據對象(RDO) RDO是一種圍繞著API產生的“包裝” 性軟件,它封裝了API中的許多功能部件,為開發者提供了ODBC驅動器的所有功能。 RDO是通過ODBC數據源訪問數據的標志性技術,它圍繞著ODBC API進行設計,并不完全適合與Oracle。盡管相對于DAO來說,它有很大的進步,但它的一些功能部件不適用于Oracle用戶,因為Oracle的體系結構與SQL服務器體系存在相當大的差異。RDO的缺點: ·微軟認為它過時了,不會再給它投入更多的工作。 ·不能通過存儲過程檢索PL/SQ游標變量。 ·RDO依靠于ODBC驅動器,通常會受到它們之間不相容性之間的影響。 三、ActiveX數據對象(ADO) ADO不但可以進行異步查詢、連接和開放式處理,而且還能基于文件和獨立的Recordset、分層結構Recordset等。它提供一種穩定的接口來使用戶利用多種不同的數據源包括從文本文件到ODBC關系型數據庫到復雜的數據庫組。 ADO是當前微軟的頂尖技術。隨著版本的更新,在事件模型部分更加成熟,但從Oracle用戶的角度出發,這個技術仍存在一些缺點: ·不能通過存儲過程檢索PL/SQ游標變量。 ·不能使用Oracle邦定參數。 ·數據環境還會帶來一些問題,它相對來講,還不夠成熟。 ·數據環境不支持Oracle打包過程。 ·處理Oracle中的大對象比較困難 四、Oracle的OLE對象(OO4O) Oracle的OLE對象(OO4O)是一種進程中的OLE服務器,它提供了一種對象層次結構,與DAO非常相似,但卻不采用ODBC標準。它利用Oracle的調用接口來與Oracle會話。其中Oracle的調用接口是一種本地代碼驅動器。令人遺憾的是它不能訪問其他數據庫。 OO4O擁有優異的功能性,訪問Oracle數據庫,其他任何數據庫訪問方式很難達到它的功能性。但OO4O仍有不足: ·在某些實例中,它的速度不是最快的。部分原因是因為它是一種進程中的服務程序。 ·OO4O不支持異步操作或事件。 ·OO4O不支持GetRows方式。OO4O主要被設計用于可更新動態集。 在OO4O中,連接是比較輕易實現的,你只需簡單的鍵入你的用戶名、口令和數據庫別名即可。對象模型與DAO的相似,比較明顯的不同是所有的對象前面都冠有“Ora”字樣。下面這些代碼創建了Ora會話對象和相應的Ora數據庫對象,然后又創建了Ora動態集來保存所檢索的結果集。最后,關閉了Ora動態集和Ora數據庫對象。 程序清單 PRivate sub FetchOO4O() Dim Orasession As Object Dim OraDatabase As Object Set OraSession(i) = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase(i) = OraSession(i).DbOpenDatabase("exampledb", "scott/tiger", 0&)
'Connect to the daabase Set OraSession = CreatObject("OracleInProcSever.XoraSession") Set OaDataBase = OraSession.OpenDatebase("beq-local",_ "video_user/ummagumma",ORADB_DEFAULT)
'Run then query strSQL="SELECT * FROM video_store.movies ORDER BY movie_id" Set rsMovies = OraDateBase.CreatDynaset(strSQL,ORADYN_READONLY)
'Display the fields while not rsMovies.EOF FOR ifields = 0 to rsMovies.fields.Count-1 Debug. rsMovies.(iFields) Next 'iField rsMovies.MoveNext Wend
Set rsMovies = Nothing Set OraSession= Nothing
End Sub 五、各種方法的比較 上面已經列舉了4種訪問Oracle數據庫的方法,下面進行一下總結。