@H_
404_0@用Visual Basic访问Oracle
数据库有许多
方法可以实现,而每种
方法都有其优缺点。你可以选择最适合你工作环境的
方法,首先你必须了解这些
方法是什么。在这篇
文章里介绍一些访问Oracle
数据库的常见
方法,对每种
方法进行简单的概述,并就每种
方法的技术和特点进行比较,希望能给广大读者提供一些借鉴。
@H_
404_0@一、数据访问对象(DAO)
@H_
404_0@数据访问对象在很长一段时间内是Visual Basic访问
数据库功能的主要技术。DAO已经存在了许多年并经历了多次
修改,但它依然是许多
数据库的对象模型。尽管DAO是数据访问中最弱的一种,但它同时也是最为人所熟知的。尽管DAO模型存在局限,但它依然有许多大量的
函数可供Oracle
用户使用,某些方面
性能还可以令人接受的。
@H_
404_0@DAO是一项过时的技术,尽管它仍应用于许多程序,但与新技术相比,它存在一些明显的缺点:
@H_
404_0@·DAO拥有的对象模型
功能比较弱,在所有的
数据库访问技术中它的
功能最弱。
@H_
404_0@·DAO被设计为适用于JET而没有调整为适用于ODBC数据源。
@H_
404_0@·DAO不适合处理大量不同类型的数据源。
@H_
404_0@二、远程数据对象(RDO)
@H_
404_0@RDO是一种围绕着API产生的“包装” 性
软件,它封装了API中的许多
功能部件,为开发者提供了ODBC
驱动器的所有
功能。
@H_
404_0@RDO是通过ODBC数据源访问数据的标志性技术,它围绕着ODBC API进行设计,并不完全适合与Oracle。尽管相对于DAO来说,它有很大的进步,但它的一些
功能部件不适用于Oracle
用户,因为Oracle的体系结构与
sql服务器体系存在相当大的差异。RDO的缺点:
@H_
404_0@·微软认为它过时了,不会再给它投入更多的工作。
@H_
404_0@·不能通过
存储过程检索PL/SQ游标变量。
@H_
404_0@·RDO依赖于ODBC驱动器,通常会受到它们之间不相容性之间的影响。
@H_
404_0@三、ActiveX数据对象(ADO)
@H_
404_0@ADO不但可以进行异步
查询、连接和开放式处理,而且还能基于
文件和独立的Recordset、分层结构Recordset等。它提供一种稳定的接口来使
用户利用多种不同的数据源
包括从文本
文件到ODBC关系型
数据库到复杂的
数据库组。
@H_
404_0@ADO是当前微软的顶尖技术。随着版本的更新,在事件模型部分更加成熟,但从Oracle
用户的角度出发,这个技术仍存在一些缺点:
@H_
404_0@·不能通过存储过程检索PL/SQ游标变量。
@H_
404_0@·不能使用Oracle邦定参数。
@H_
404_0@·数据环境还会带来一些问题,它相对来讲,还不够成熟。
@H_
404_0@·数据环境
不支持Oracle打包过程。
@H_
404_0@·处理Oracle中的大对象比较困难
@H_
404_0@四、Oracle的OLE对象(OO4O)
@H_
404_0@Oracle的OLE对象(OO4O)是一种进程中的OLE服务器,它提供了一种对象层次结构,与DAO非常相似,但却不采用ODBC标准。它利用Oracle的
调用接口来与Oracle会话。其中Oracle的
调用接口是一种本地
代码驱动器。令人遗憾的是它不能访问其他
数据库。
@H_
404_0@OO4O拥有优异的
功能性,访问Oracle
数据库,其他任何
数据库访问方式很难达到它的
功能性。但OO4O仍有不足:
@H_
404_0@·在某些实例中,它的速度不是最快的。部分原因是因为它是一种进程中的服务程序。
@H_
404_0@·OO4O
不支持异步操作或事件。
@H_
404_0@·OO4O
不支持GetRows方式。OO4O主要被设计用于可更新动态集。
@H_
404_0@在OO4O中,连接是比较容易实现的,你只需简单的键入你的
用户名、口令和
数据库别名即可。对象模型与DAO的相似,比较明显的不同是所有的对象前面都冠有“Ora”字样。下面这些
代码创建了Ora会话对象和相应的Ora
数据库对象,然后又创建了Ora动态集来保存所检索的结果集。最后,
关闭了Ora动态集和Ora
数据库对象。
@H_
404_0@程序清单
@H_
404_0@private sub FetchOO4O()
@H_
404_0@Dim OraSession As Object
@H_
404_0@Dim OraDatabase As Object
@H_
404_0@Set OraSession(i) = CreateObject(”OracleInProcServer.XOraSession”)
@H_
404_0@Set OraDatabase(i) = OraSession(i).DbOpenDatabase(”exampledb”,“scott/tiger”,0&)
@H_
404_0@‘Connect to the daabase
@H_
404_0@Set OraSession = CreatObject(”OracleInProcSever.XoraSession”)
@H_
404_0@Set OaDataBase = OraSession.OpenDatebase(”beq-local”,_
@H_
404_0@“video_user/ummagumma”,ORADB_DEFAULT)
@H_
404_0@‘Run then query
@H_
404_0@str
sql=”SELECT * FROM video_store.movies ORDER BY movie_id”
@H_
404_0@Set rsMovies = OraDateBase.CreatDynaset(str
sql,ORADYN_READONLY)
@H_
404_0@‘Display the fields
@H_
404_0@while not rsMovies.EOF
@H_
404_0@FOR ifields = 0 to rsMovies.fields.Count-1
@H_
404_0@Debug. rsMovies.(iFields)
@H_
404_0@Next ‘iField
@H_
404_0@rsMovies.MoveNext
@H_
404_0@Wend
@H_
404_0@Set rsMovies = Nothing
@H_
404_0@Set OraSession= Nothing
@H_
404_0@End Sub
@H_
404_0@五、各种
方法的比较
@H_
404_0@上面已经列举了4种访问Oracle
数据库的
方法,下面进行一下总结。