基于Visual Basic访问Oracle数据库方法的改进
摘要:针对Visual Basic端远程访问Oracle数据库的问题,本文介绍了客户端无需安装Oracle客户软件的连接方式,简化了Visual Basic客户端的复杂性,提高了访问效率。本文介绍了ADO技术,设计了基于ADO技术建立VB和Oracle数据库的连接方法,并且根据实例有效的解决了无客户端访问Oracle数据库的问题。
论文关键词:VisualBasic,Oracle数据库,ADO,无客户端
当今社会已经进入信息时代,作为信息管理的主要工具的数据库已经成为举足轻重的角色。无论是企业、组织的管理还是电子商务或电子政务等应用系统的管理,都需要数据库的支持。Oracle数据库是一种大型数据库系统,能在所有主流操作系统平台(包括 Windows、Unix、Linux等等 )上运行;完全支持所有的工业标准,采用完全开放策略,可以使客户选择最适合的解决方案,提供高可用性和高伸缩性的解决方案;在安全方面,Oracle已是获得了最高认证级别的 ISO 标准认证;它还是多层次网络计算,支持多种工业标准,可以用 ODBC、JDBC、OLE DB 等与网络客户连接[1]。Oracle数据库是目前最流行的关系数据库管理系统,被越来越多的用户在信息系统管理、企业数据管理、Internet、电子商务网站等领域作为应用数据的后台处理系统。
收稿日期:
项目基金:国家博士后基金资助项目(20100481013)
作者简介:金艳(1986-),女,辽宁锦州人,硕士研究生,主要研究方向为图像处理与模式识别,E-mail:jinyan5407101@sina.com;徐涛,(1971-),女,辽宁彰武人,博士,副教授,硕士生导师,主要研究方向为自动化测试及故障诊断,http://www.751com.cn/
Visual Basic具有强大的数据库管理功能,利用数据控件和数据库管理窗口,可以直接建立或处理Microsoft Access格式的数据库,并提供了强大的数据存储和检索功能。同时,Visual Basic还能直接编辑和访问其他外部数据库,如Oracle,dBASE,FoxPro,Paradox等,这些数据库格式都可以用Visual Basic编辑和处理[1]。可完美地实现Client/Server 结构,使程序中调用数据变得轻松易行。在客户端采用Visual Basic设计软件连接Oracle数据库时,需要在用户的机器上安装一个Oracle数据库客户端,这无疑会增加用户不少工作量,降低软件的友好性。为了解决这个问题,本文以 Oracle 为后台数据库,介绍基于Visual Basic 无客户端对远程Oracle数据库的访问。
1 使用ADO技术连接Oracle数据库
在Visual Basic中访问Oracle数据库的方法有以下四种方法:DAO,ADO,Oracle Data Control,oo4o[1]。本文重点介绍ADO的方法,实现数据库的访问。
1.1 ADO技术简介
ADO(ActiveX Data Object)是Microsoft的数据库应用程序开发的新接口,是建立在OLE DB之上的高级数据库访问技术。
作为Oracle用户,既可以通过ODBC的OLE-DB提供者访问Oracle,也可以通过与Visual Basic 6.0相配的数据源执行同样的操作。软件层中有关上述操作的不同路径如图1(Fig.1)所示[2]。
无客户端
图1 ADO所使用的软件层
Fig. 1 Architecture of ADO
ADO技术具有易于使用、高速访问数据源、可以访问不同数据源、程序占用的内存少的特点。
1.2 ADO对象模型
ADO对象模型规定了一组可编程的分层对象集合,在VB应用程序中通过创建这组对象集合来连接数据库并实现数据库的各种操作。ADO数据模型主要有Connection、Command、Recordset、Field、Parameter、Property和Error7个对象组成。此外还有四个集合对象:Fields、Properties、Parameters、和Errors集合,如图2(Fig.2)所示[2]。
基于Visual Basic访问Oracle数据库方法的改进Oracle数据库Oracle数据库基于Visual Basic访问Oracle数据库方法的改进ADO
图2 ADO对象结构
Fig. 2 Objects of ADO
1) Connection对象
Connection对象用于连接数据源。在数据库应用程序设计中,用户所做的第一步工作是连接数据库,也就是说必须先用Connection对象建立数据源的连接,然后再进行其他的数据操作。
在ADO数据库应用程序设计中,可以用Connection对象建立应用程序与常用的数据库的连接。下面的是连接Oracle数据库的格式:
Dim conn As New ADODB. Connection
Conn.ConnectionString=”Provider=OraPLEDB.oracle;”& _
“Data Source=EmpDB”& _
“User Id=sa;Password=sa”
Conn.Open
如果是客户机/服务器数据库系统,则该对象可以等价于到服务器的实际网络连接。
2) Recordset对象
Recordset 对象用于表示基本表或命令执行结果的记录集,任何时候Recordset 对象都只将集合中的单个记录作为当前记录应用。在使用ADO对象时,几乎全部使用Recordset 对象均由记录和字段组成。
3) Command对象
Command对象用于定义要对数据源执行的特定命令。用户可以通过Command对象查询数据库并返回Recordset对象中的记录,以便执行大量操作或对数据库结构进行操作。
4) Field对象
Field对象用于表示数据类型的数据列。每个Field对象都对应于Recordset 对象中的一列。使用Field对象的Value属性来设置或返回当前记录的数据。
5) Stream对象
Stream对象用于表示二进制数据或文本的流。使用Stream对象可以为数据库应用程序很方便的添加图像数据。
6) Error对象
Error对象包含了有关数据访问错误的详细信息,这些错误与涉及提供者的单个操作有关。在数据库应用升序设计中通过Error对象可以很方便地捕获错误并对错误进行处理。
2 Visual Basic访问Oracle数据库的实现过程
ADO应用程序的使用方法有以下两种[6]。
2.1 用ADO Data控件
ADO控件用于对数据源进行访问和操作。与Data控件相比,ADO控件的应用范围和功能更强大。
该控件通过Microsoft ActiveX Data Object(ADO)技术,快速地创建一个到数据库的连接。ADO控件可以连接任何符合OLE DB范围的数据源或是一个ODBC数据库[3]。
ADO不是内部控件,在使用ADO控件之前,必须先将该控件加载到工具箱中。选择“工程”“部件”,在列表中选择“Microsoft ADO Data Control 6.0(OLE DB)”选项,单机“确定”按钮,加载ADO控件到工具箱[4]。
这种方法简单,用户只需写较少的代码,甚至不写一行代码,可以实现对数据库的访问。其缺点是效率较低,用户对程序的控制弱,不能充分发挥ADO强大功能。
2.2 直接使用ADO对象
这种方法可以非常灵活地控制程序的细节,而且效率、性能很高,可以充分发挥ADO的特性。通过对 ADO对象模型中的主要对象进行简单编程,达到快捷灵活地访问各种类型数据库的目的。因而本文采用此方法进行Oracle数据库访问[5]。
3 Visual Basic环境下无客户端访问Oracle数据库实现
3.1 创建新工程及引用ADO数据对象
启动Visual Basic 6.0集成开发环境后,在弹出的“新建工程”对话框中选择“标准EXE”,单机“确定”按钮,创建一个新工程[4]。
Visual Basic 6.0中绑定了ADO对象,使用ADO对象之前应该通过“工程”“引用”命令,选择“Microsoft ActiveX Data Object 2.5 Library”列项表,然后单机“确定”按钮,将ADO对象添加到工程中[4]。
在Form1窗体上添加一个Data Grid控件,单机菜单中的“工程”“部件”选项,然后选取“Microsoft Data Grid Control 6.0 SP6(OLEDB)”列表项,单机“确定”按钮。此时Data Grid控件出现在工具箱[4]。
3.2 Visual Basic使用ADO远程访问Oracle数据库
下面代码显示了基于VB环境下利用ADO技术无客户端对Oracle数据库远程访问的实例。
Private Sub Form_Load()
Dim PathStr As String, oraclePath As String oraclePath = Replace(App.Path, '/', '')
If Right(oraclePath, 1) <> '' Then oraclePath = oraclePath & '' oraclePath = oraclePath & 'OracleInstantClient' '组件存放的路径
PathStr = Environ('path') '获得老的Path环境变量的值
If Right(PathStr, 1) <> ';' Then PathStr = PathStr & ';'
If InStr(UCase(';' & PathStr), UCase(';' & oraclePath & ';')) = 0 Then PathStr = PathStr & oraclePath & ';'
SetEnvironmentVariable 'PATH', PathStr '设置dll访问的环境变量
SetEnvironmentVariable 'NLS_LANG', 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
'设置环境变量,防止中文乱码
SetEnvironmentVariable 'TNS_ADMIN', oraclePath '这是指 tnsnames.ora 文件所在路径
Set conn = New ADODB.Connection '创建连接对象
conn.Open'Provider=MSDAORA.1;UserID=system;Password=sa;DataSource=''(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=202.198.128.100)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=Vibratio)))'';Persist Security Info=True;' '基于Microsoft Oracle的连接
Set conn As ADODB.Connection '声明连接对象
Set rs = New ADODB.Recordset '创建记录对象
rs.Open 'select * from Test', conn '打开表格
Set DataGrid1.DataSource = rs '将表中的数据在Data Grid控件中显示
End Sub
其中环境变量的设置要在客户端上完成。MSDAORA.1是Microsoft OLEDB provider for Oracle的连接,也可运用其他的方式,UserID=system Password=sa分别是服务端Oracle数据库的用户名和密码,HOST=202.198.128.100是服务器端的IP地址,PORT=1521是默认的端口号,SERVICE_NAME=Vibratio是服务器数据库服务的名字,rs.Open 'select * from Test', conn中的Test是本例Oracle数据库名为VIBRATION的数据库中建立的表。
3.3 添加客户端库文件及环境变量
1、由于无需安装Oracle数据库的客户端,只需要需要在客户端的计算机上添加动态连接库文件。在Oracle下载一个Instant Client Package的软件,即
instantclient-basic-win32-10.1.0.5-20060419中的文件解压到指定位置,本文解压的位置为 C:OracleInstantClient 。classes12.jar、oci.dll、ocijdbc10.dll、ociw32.dll、ojdbc14.jar、orannzsbb10.dll、oraocci10.dll、oraociei10.dll以上8个文件为instantclient-basic-win32-10.1.0.5-20060419中的库文件,然后再在作为客户端的计算机上的C:OracleInstantClient建立下一级文件夹 etworkadmin,在其中添加远程监听文件tnsnames.ora,该程序可以Oracle服务器的安装目录Oracleproduct.1.0Db_1admin文件夹中找到,其内容如下:
VIBRATIO =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =202.198.128.100)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = VIBRATIO)
)
)
2、在客户端的环境变量路径path中加入C:OracleInstantClient,在作为客户端的计算机上安装Visual Basic自带的打包文件,运行打包程序后显示的结果就是服务器端的Oracle数据库中的表Test的内容,如图3(Fig.3)所示。
Oracle数据库
图3 客户端软件设计结果
Fig. 3 Result of Client Software design
3、本文中的程序在以下环境运行通过:
服务器:Windows XP 服务器,Oracle 10g 数据库
客户端:Windows XP,Visual Basic 6.0,Oracle 10g客户端组件
结束语
ADO数据对象进行数据库访问,速度快、功能强大。Visual Basic环境下无客户端对Oracle数据库进行访问,减少了安装客户端的麻烦,运用本文提出的方法就可以实现无Oracle客户端访问Oracle数据库,此方法操作简单,运行可靠性高。
参考文献
[1] 张盛华. VB基于ADO访问ORACLE数据库的策略[J]. 电脑知识与技术. 数据库与信息管理. 2005,(36): 44-47.
[2] NICK SNOWDON. Oracle与Visual Basic 编程指南[M]. 魏东,魏民,邢雷等,译. 北京:电子工业出版社, 2000:265-266.
[3] 黄保和,李更名. Visual Basic程序设计与数据库应用[M]. 厦门大学出版社. 2009:240-242.
[4] 胡小江. 21天学通Visual Basic[M]. 北京:电子工业出版社. 2009:345-357.
[5] 邵回祖. VB下利用ADO技术访问Oracle数据库[J].电力学报. 2003,(4):257-259.
[6] 马栎. 在Visual Basic中实现与Oracle数据库的多种访问方式[J]. 计算机时代. 2004,(7):39-40.