电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

VB访问数据库的方法

来源:开心麻花作者:开心麻花2025-09-191

VB访问数据库的方法(精选9篇)

VB访问数据库的方法 第1篇

关键词:Visual Basic,数据库

Visual Basic语言是一门基础的编程语言,Visual Basic也是大家较为熟悉的编程工具,通过它可以轻松地编写各种应用程序。数据库编程是编程世界中较为特殊的一个领域,它涉及了大量与编程相对独力的数据库的知识,所以另许多人望而生畏。但使用Visual Basic连接数据库则使问题变得简单。本文主要介绍一种利用Visual Basic编写数据库程序的方法和用VB访问数据库应注意的几个问题。

1 Visual Basic访问数据库的方法

1.1 使用Microsoft Access建立数据库

首先打开Microsoft Access新建数据库,单击[工具]菜单上的[数据库实用工具]|[转换数据库]|[转为Access97文件格式],在随后出现的对话框中的文本框中输入mystudent.mdb,并单击[保存]按钮将该数据库保存在d盘,。经过如此转换,使用VB6.0的数据捆绑控件就可以直接访问了,如图1所示。

1.2 使用DataControl读取数据库

1)在VB中新建一个工程1,在窗体中建立一个DataControl控件,将此控件connect属性设定为access,data-basename属性为d:mystudent.mdb,recordsource属性为mystudent。

2)在此窗体中建立六个文本框,将他们的[datasourse]属性改为[data1],并分别依次将[datafied]属性改为[学号]、[出生年月]、[姓名]、[政治面貌]、[性别]、[所属系部]。相应的再建立六个标签及四个命令按钮[增加]、[删除]、[更新]、[退出],如图2所示。

3)单击[运行],可用data1控件移动纪录并能更新纪录。

4)在各命令按钮的command-click()中写入相应的代码,可实现增加,删除,更新、退出等功能。代码如下:

然后在Visual Basic6.0提供的[设计安装程序向导]的提示下(如图3)依次点击[开始]、[程序]、[MicrosoftVisual Basic6.0中文版]、[MicrosoftVisual Basic6.0中文版工具][打包和展开向导],选[添加]按扭并挑选C:vb98mystudentmystudent.mdb数据库,[下一步]之后,单击[单个的压缩文件],再[下一步]之后,修改安装标题,此后在连续出现的[启动菜单项]、[安装位置]窗口,点击[下一步],当出现[共享文件]窗口,选取mystudent.mdb文件,单击[下一步],既可完成安装程序的制作。

2 用VB访问数据库应注意的几个问题

1)如何来访问数据库。VB访问数据库提供二种方法,其一是用数据控制,其二是使用对象来访问数据库,在这两种方法中,都涉及到数据库的属性。但有时设置好connect,databasename后再设置recordsoure时,经常会出现“无法找到可安装的ISAM”错误。这里所讲的[ISAM]是在VB.INI文件中,它为VB指明所访问数据库的动态链接库。而在connect中所用的数据库的名称必须于[ISAM]中的数据库的名称相符合,这样就可以轻松地打开数据库。

2)关于书签指针即bookmark属性。在VB访问数据库时,数据库中的记录是没有记录号的,但VB提供了bookmark属性来记录当前访问记录的记录指针,这个bookmark就相当于记录号。但在实际编程时发现在使用数据库控制和用对象打开数据库来访问同一个数据库时的bookmark属性在这两者之间并不通用。当用bookmark记录了用数据控制打开的数据库的当前记录指针,然后使用对象打开此数据库后,用数据控制的bookmark来查找定位记录时,将会导致bookmark不合法的错误。

3)要注意hide方法和unload方法的区别。Hide方法是将你所指定的表单隐藏起来,但并不从内存中删除它,故此表单的内容并没有改变。而unload方法是将指定的表单删除掉(从屏幕上消失并从内存中删除),如在当前表单中使用格子控制来显示记录内容,然后用hide方法隐藏此表单,随后你重新选定记录装入格子控制,用show方法显示隐藏的表单,此时格子里的内容依然是旧的内容而新内容并没有代替旧内容。这里就需要使用unload方法将表单删除,然后新记录装入格子控制,用show方法显示时,就可以看到新的内容。

4)要注意变量类型的匹配。在访问数据库时,显示记录一般都使用格子控制,其中grid.text是子符串类型,但有些记录的数据项是空的(null)即没有数据。若将null装入grid.text显然会出错,所以这里就需要加入类型的判断,将null数据项赋于空格子符串,这样就可以解决此问题。

5)如何实现网格式打印数据库记录。VB所提供的打印机输出对象有表单、文本框、图片框和报表。这里可以使用报表控制来实现网格式打印输出,但报表控制需要报表格式文件.prt,此文件由VB提供的报表编辑器来设计所需要的报表格式,而产生的报表文件是输出数据库的所有记录,但往往我们只需要数据库中符合条件的部分记录。那么如何实现部分记录的网格式打印呢?我们可使用的方法是用报表编辑器设计一个连接空的数据库文件,然后在程序运行中将符合条件的部分记录装入空的数据库中,再使用报表控制来打印输出,这样就可以实现任何你所需要数据的报表打印输出。

6)要注意调用系统的DLL(dynamic-link libraries,动态链接程序库)。VB是一种高级程序设计语言,不具备低级语言的一些功能,它本身对于访问机器硬件等操作比较困难。若通过DLL调用Windows应用程序接口(API)函数,就可以方便地访问硬件。系统的DLL有keynel库,gdi库和user库,其中keynel库负责内存管理和文件管理,gdi库负责显示和打印功能,user负责键盘、鼠标、声音、通信、系统定时的管理。同时,VB也可以调用任何语言所编写的DLL。所以要想编出高质量的应用程序就必须学会如何调用DLL来实现所需的功能。

3 结束语

数据库是计算机应用最广泛的技术之一几乎所有的部门都会涉及到数据库的应用,而如何更好的利用数据库技术则是我们当前最为关注的问题,为此,我们利用Visual Basic的数据库功能为我们打开了通向数据库技术的大门,使得数据库技术不再那么遥不可及,可与程序设计语言更加紧密的结合在一起,为我们的学习和工作提供更多的方便。

参考文献

[1]王志东.用VB访问数据库[J].集宁师专学报,2002(4).

[2]李菲.浅谈高职高专VB课中建立报表的方法[J].电脑知识与技术,2009(16).

基于本体的通用数据访问方法 第2篇

基于本体的通用数据访问系统的核心在于构建出合适的统一数据描述模型,以此模型为基础,构建数据访问引擎,并通过抽取配置工具建立了数据描述模型与数据实体之间的映射关系,最终通过通用数据访问软件实现异构数据的统一访问和展现。

【关键词】异构数据 本体 描述模型 映射 通用访问

1 引言

随着近年来网络技术的快速发展,各领域之间数据共享的需求日益增强,在网络基础设施日益完善的前提下,如何对不同行业和格式的数据资源进行统一访问和集成使用就成为了关键的问题。

国内外对于异构数据库数据的集成近期提出了ETL(数据抽取、传输、加载)机制,在实现中采用XML(可扩展标记语言)实现通用的数据交换,利用全局逻辑视图或者集成的综合数据库的方式实现对各类异构数据资源的集成。

本文通过定义数据本体,设计了一种通用的数据访问方法,建立不同的数据资源与本体之间的映射,使得综合系统直接访问各个异构业务数据库,从而提高数据的使用效率,降低数据冗余。

通用数据访问面向的异构数据具有海量、多元、复杂、动态、移动、实时等特征,为了更好的解决异构数据资源的访问、集成和展现,在设计与实现通用数据访问系统时,必须提供用户对异构数据源透明、一致和实时的访问能力:

(1)透明性,是指屏蔽底层数据源的差异,从用户的角度看来,得到的数据不是来自于若干个数据源,而是一个数据源;(2)一致性,是指消除数据源之间的存在的结构异构和语义异构;(3)实时性,是指访问到的数据是最新的数据,并且对数据库中实时变化的信息能够及时地捕获与展现。

2 总体思路及架构

基于本体的通用数据访问方法面向图形化的数据展现,快速的从异构数据资源中抽取出适用的对象,对其进行统一管理,并借助地理信息系统或表单显示工具向用户提供清晰直观的数据展现。

其主要解决异构数据的统一使用问题,在避免数据格式转换带来大量工作的前提下,实现数据的动态加载,保证应用系统与底层数据资源的分离,同时具有良好的扩展性,在数据种类发生变化时,只需要通过工具界面配置,就能够快速加载新增的数据资源。

基于本体的通用数据访问方法采用分层的体系结构,下层软件给上层软件提供运行支撑或输入,共分为四层,从底到顶分别是:本体定义及管理层、元数据映射层、数据访问层和数据展现层。

2.1 本体定义及管理层

本体定义及管理层主要负责建立基于本体的统一数据描述模型,并制订出一套对该数据描述模型的访问接口规范,是整个方法实现的核心和基础。

2.2 元数据映射层

元数据映射层主要实现数据的灵活配置,通过人工界面配置的手段在数据库元数据与统一数据描述模型之间建立对应关系,并把映射关系保存为XML文件,供通用数据访问软件读取。

2.3 数据访问层

数据访问层主要完成对数据库中实际数据的读取和输出。

通用数据访问软件在实现时遵循本体定义及描述层制订的规范,内部的数据组织关系来自于元数据库映射层生成的映射关系XML文件。

2.4 数据展现层

数据展现层主要包括两种展现手段:基于地理信息的图形化显示工具和表格形式的表单显示工具。

数据展现层属于业务应用范畴,主要需要考虑的是基于地理信息系统(GIS)的数据表现以及海量数据高性能显示的问题,与通用数据访问的实现没有直接关系,因此在本文中不对这部分的实现进行讨论。

3 关键技术及实现

3.1 统一数据描述模型

统一数据描述模型的内容包括图层公共信息(本体)和特征属性族,各类异构的数据在按照统一数据描述模型表述为本体和特征属性族的过程中,消除其原有的异构性,形成统一的数据表述。

统一数据描述模型主要由图层公共信息和一组特征属性族组成。

统一数据描述模型确定种类繁多的数据信息之间存在的内在共同点,建立图层公共信息的统一描述。

图层公共信息:

其中标识属性、空间位置属性、时间属性以及符号属性,这几个属性的组合体现了数据对象在全维图形上的基本价值。

在统一数据描述模型中除了建立统一的图层公共信息描述以外,还借鉴可扩展标记语言的思想,建立了一个对象特征属性族描述方法,用来存放每类数据对象的具体属性项。

该属性族由数据对象的类型确定,其可扩展的`特性保证了每一类数据对象信息项的完整,同一类对象属性族项的数量和构成保持一致。

特征属性族定义:

3.2 数据图层映射转换

采用根据数据库中字段的取值确定图层对象的动态映射机制,并提供多种方法来规范映射,提供了语义映射机制,通过将数据库字段与统一数据描述模型中的属性建立字段映射机制;采用数据库数据到图层对象的语义映射,提供量纲映射机制,通过规范数据库中数据到图层对象的取值处理标准,提供多种量纲转换机制,如经纬度的转换机制和时间格式转换机制等等;采用字段映射机制或条件映射机制来处理图层显示属性。

如果显示属性采用字段映射机制进行配置处理,那么将使用配置字段的取值进行显示处理;如果显示属性采用条件映射机制进行配置,那么在进行显示处理时,将对这组字段的取值进行判断,符合某组合的取值,则用该组合的设置值进行显示,没有符合的条件组合就是用默认值进行显示。

4 结束语

本文的研究对象主要是针对数据库形态的数据资源,而文中提出的方法对其他形态的数据资源也同样适用,因此,后续的工作将以建立各种形态数据资源统一访问的软件系统为目标。

参考文献

[1]缪嘉嘉,邓苏,刘青宝.E T L综述计算机工程,2004(2).

[2]沈镭.基于XML的异质多数据库集成系统的设计与实现[J].河南大学学报(自然科学版),2007(9):530-532.

浅析VB中的三种数据访问技术 第3篇

关键词:DAO RDO ADO 数据访问

0 引言

数据库实质上是一个庞大的、不同类型的数据集合。早期的数据库系统不提供对外接口,仅可有特定软件访问数据,随着计算机技术的发展和应用水平的提高,数据库系统逐渐发展、完善对外接口,成为标准的应用支持平台。程序员再也不必自己编写数据管理程序,只需使用标准接口连接数据库即可获得数据库系统的全部功能。而访问数据库是现代应用程序必备的基本功能之一,无论是数据库管理系统,还是多媒体应用系统,都需要强大的数据库支持。VB为程序员提供了多种访问数据库的手段,包括数据控件、DAO、RDO及ADO等。本文简单介绍DAO、RAO、ADO的体系结构,并对三者进行简单总结和比较。

1 DAO

1.1 DAO概念 数据访问对象DAO(Data Access Objects)出自VB6.0提供的一个对象库,为处理数据提供了完整、灵活的支持。DAO模型是设计关系数据库系统结构的对象类的集合。它们提供了管理关系型数据库系统所需的全部操作的属性和方法,其中包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等。在程序中使用它可以访问Access、FoxPro、dBase等数据库,某些条件下也可以访问ODBC数据库。

1.2 DAO层次结构 DAO模型的体系结构如图1所示。DAO的结构严谨而丰富,正是这样的结构,提供了足够丰富的访问数据库的方法。DAO是完全的面向对象的,它将数据的值作为属性,数据的查询作为方法,数据值的变化作为事件。

1.3 使用DAO 使用DAO的步骤为:①创建工作区;②打开数据库;③创建记录集;④使用记录集访问数据库;⑤关闭DAO。

2 RDO

2.1 RDO概念 远程数据对象RDO(Remote Data Objects)是位于ODBC API和驱动程序管理器之上的对象模型,它提供一系列的对象来满足远程数据访问的特殊要求。尽管RDO在访问Jet数据库时受到限制,只能通过现存的ODBC驱动程序来访问关系数据库,但它能访问任意的ODBC数据源,特别适用于智能的数据库服务器(如SQL Server和Oracle等)。RDO具有短小快速的特性。

2.2 RDO层次结构 要正确地使用RDO,必须深入理解RDO对象模型。RDO对象和集合提供了使用代码创建并控制远程ODBC数据库系统部件的框架。对象和集合的属性描述了数据库部件的特征,也描述了用来操纵它们的方法。RDO对象模型的体系结构如图2所示。

2.3 使用RDO 使用RDO连接数据库的过程如下:①创建RDO环境;②连接数据库;③打开结果集;④操作结果集;⑤关闭数据库。

3 ADO

3.1 ADO概念 活动数据对象ADO(ActiveX Data Object)是Microsoft新的数据访问技术。该技术可屏蔽远程数据访问的复杂性而高效、快速的访问多种数据库,是基于OLE DB之上的更简单、更高级、更适合Visual Basic程序员,它封装并实际上实现了OLE DB的所有功能,同时消除了OLE DB的多种弊端。

3.2 ADO对象模型 ADO模型包含一组对象,用于访问数据库。ADO对象模型体系结构如图3所示。

3.3 使用ADO ADO最基本的操作流程是:①初始化COM库,引入ADO库定义文件;②用Connection对象连接数据库;③利用建立好的连接,通过Connection、Command对象执行命令,或是利用Recordset对象取得结果记录集进行处理;④使用完后关闭连接释放对象。

4 DAO、RDO、ADO的比较

DAO是Jet引擎的面向对象的编程接口,用于访问Jet或ISAM数据库,并允许VB开发者直接连接到Access数据表。因此,DAO技术在访问MDB文件格式的数据库时有优势。但如果开发者想使用DAO与Oracle或SQL Server这样的非MDB 文件格式的数据库服务器进行通信,则对数据库的所有调用和数据输出都必须经过Access/Jet数据库引擎,这对于使用数据库服务器的应用程序来说是一个严重的瓶颈。因此适用于单系统应用程序或小范围本地分布使用。

RDO是是一个到ODBC的、面向对象的数据访问接口,是从DAO派生来的,适用于大型的客户、服务器数据库。它兼具 DAO和ODBC API二者的优点:一方面,它较DAO层次结构简单,便于对象的创建和处理;另一方面,它表露了ODBC的底层结构,提供环境、连接和语句句柄。此外,RDO还提供了用来访问存储过程和复杂结果的更多、更复杂的对象、属性和方法,因此,尽管它只能通过现存的ODBC驱动程序访问关系数据库,并在访问Jet或ISAM数据库方面受到某些限制, 但它在许多大型关系数据库应用程序开发的仍被证明是一种比较好的选择。

ADO是一种新的数据库访问技术,是特别为客户/服务器应用程序开发而设计的。ADO是DAO和RDO的后继产物,比DAO和RDO更简单、更加灵活。ADO在功能上与RDO更相似,而且它们之间有一种相似的映射关系。ADO扩展了DAO和RDO所使用的对象模型,它包含较少的对象,更多的属性、方法和事件。

RDO使用行和列的概念,而DAO使用记录和字段的概念。RDO的查询结果以结果集的形式返回数据,结果集可以包括零个或多个数据行,每行又可以包括一个或多个列。DAO需要使用游标访问数据,而RDO允许创建无游标的结果集,所需的资源大大少于游标。DAO支持数据库模式的创建、修改、参照完整性和安全性,而RDO不支持任何形式的参照完整性、安全性或模式修改。DAO对象模型主要用于Jet引擎,RDO对象模型主要用于ODBC数据访问,而ADO对象模型主要用于OLE DB。Jet和ODBC主要是针对数据库访问,而OLE DB对许多不同的数据源提供多机种环境的数据访问。Microsoft公司已将 ADO作为数据存取API的未来选择;VBScript以使用ADO,这使它很适合服务器/数据库的整合。因此,ADO是客户/服务器和基于Web的应用程序开发的首选。随着数据库访问技术的不断发展,ADO将成为数据库访问技术的主流。

参考文献:

[1]求是科技.VisualBasic6.0数据库开发技术与工程实践[M].北京:人民邮电出版社.2004:121~156.

[2]夏庆梅熊华钢:VB访问SQLServer的三种数据访问接口的研究[J].计算机应用研究2001.18(12).44~47.

[3]李罡,张翠频,李雷.VisualBasic6.0编程基础与范例[M].北京:电子工业出版社,2000,325~348.

VB数据库的访问技术 第4篇

Visual Basic专业版是一种广泛使用的数据库编程语言, 提供了对数据库应用的强大支持。VB访问数据库的方法大致有三类:使用数据绑定控件, 使用数据库存取对象变量 (Data Access Object Variable) , 直接调用ODBC 2.0 API接口函数。

一、VB的数据库结构

VB数据库的核心结构是MicroSoft Jet数据库引擎, JET引擎的作用是支持多种ISAM (Indexed Sequential Access Method, 即索引顺序存取方法) 数据驱动程序。VB环境下Access是缺省的数据格式, 对于其他的关系型数据库如FoxPro、Dbase (或Xbase) 、Paradox、Btrieve等, VB的专业版可兼容其驱动程序, 这就使得VB能支持这些数据库格式。由上可见, Ms JET引擎实质上提供了:一个符合ANSI标准的语法分析器;为查询结果集的使用而提供的内存管理功能;同所支持的数据库的外部接口;为应用代码提供的内部接口。

二、VB访问数据库的原则和方法

1. VB访问数据库的原则

(1) 代码的重用和运行的效率

VB程序设计中, 应尽可能减少代码的重复编写, 提高运行效率。例如:通过使用ODBC数据源连接数据库的方法, 可在变换多种数据库类型的情况下, 而不用频繁修改代码。用VBSQL通过DB-Library就做不到。而ODBC接口并不是VB访问数据库运行效率最高的方法。同样, 同是使用ODBC接口的ADO的效率要高于RDO。

(2) 实现的简便性, 易维护性

如果一种方法实现起来很复杂, 工程的开发必然造成人力物力的浪费, 同时这样设计出来的应用程序只会支持起来更复杂或维护时更困难。例如:本地需要访问ISAM或Jet类型数据源, 那么就使用DAO/Jet, 而没有必要使用通过ODBC的方法。RDC实现起来要较RDO更容易。

(3) 安全原则

这一条应根据环境和条件决定。例如局域网的网络安全性要好于广域网, 因而可直接利用数据控件DC, 这样实现起来方便快捷, 而广域网需要大量的错误捕获, 如用RDC就不如用RDO易控制错误。

2. 数据访问接口功能及含义

ADC (Advanced Data Connector) :高级数据连接器, 提供绑定ADO数据源到窗体的数据绑定控件上。ADC主要是一种直接访问或者通过ADO访问远程OLE DB对象的一种技术, 它也支持主要应用在微软IE浏览器上的数据绑定控件。它是特地为Web上的浏览器为基础的应用程序而设计的。

ADO (Active Data Objects) :Active数据对象, ADO实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式, 通过ODBC的方法同数据库接口。可以使用任何一种ODBC数据源, 即不止适合于SQL Server、Oracle、Access等数据库应用程序, 也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术, 因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。

DAO (Data Access Objects) :数据访问对象, 是一种面向对象的界面接口。通过DAO/Jet功能可以访问ISAM数据库, 使用DAO/ODBC Direct功能可以实现远程RDO功能。使用DAO的程序编码非常简单, DAO提供丰富的游标 (Cursor) 类型的结果集和非游标 (Cursor-Less) 类型的结果集, 同DDL (数据描述语言) 的功能很类似。DAO模型是设计关系数据库系统结构的对象类的集合。它们提供了完成管理这样一个系统所的全部操作的属性和方法, 包括创建数据库, 定义表、字段和索引, 建立表间的关系, 定位和查询数据库等工具。

JET (Joint Engine Technology) :数据连接性引擎技术, 是一种基于工作站通过DAO的数据库访问机制。虽然可以通过微软Access提供的ODBC驱动程序访问Jet数据库, 但使用这些驱动程序在功能上有所限制。Jet机制有自己的查询和结果集处理功能, 并可对同种或异种数据源作查询处理。

ODBC (Open Database Connectivity) :开放式的数据库连接, 是一种公认的关系数据源的接口界面。提供统一接口的界面, ODBC对任何数据源都未作优化。

ODBC Direct:是一种基于DAO对象的新的DAO模式, 其方法和属性与RDO功能相同。使用在有DAO代码存在的场合, 可用来访问远程数据源。

OLEEDB:是一种底层数据访问界面接口。是用于第三方驱动程序商家开发输出数据源到ADO技术的应用程序或用于C++的开发者开发定制的数据库组件。OLE DB不能被VB直接调用。

RDC (Remote Data Control) :远程数据访问控件, 是一种对RDO数据绑定的控件。可以输出特定的结果集到数据源控件。

RDO (Remote Data Objects) :远程数据对象, 远程数据对象和集合为使用代码来创建和操作一个远程ODBC数据库系统的各个部件提供了一个框架。对象和集合都具有描述数据库的各个部件特征的属性以及用来操作这些部件的方法。可以在对象和集合之间建立起关系, 这些关系就代表了数据库系统的逻辑结构。RDO是ODBC API的一个浅层界面接口。是专为访问远程ODBC关系数据源而设计的。

VBSQL:是Visual Basic结构化查询语言。是一种基于API的接口方法, 几乎与C的DB-Library API相同, VBSQL只支持微软的SQL Server。VBSQL快而且轻但不支持对象界面。

3. VB访问数据库的方法

VB访问数据库的方法很多, 一般情况下分成三大类, 而每一类又有很多方法。下面列出每一类, 及每一类包含的方法。

(1) 数据控件法

数据库绑定控件来实现数据的输入、显示、筛选等接口界面。VB支持多种数据源访问控件, 在VB和COM界面接口之间起着媒介作用。这些控件提供了一种减少代码实现数据访问的途径。程序员可以使用同样的对象、属性和方法来处理各种不同的数据库格式。也可从一种数据库格式变到另一种格式 (例如, 将本地的Microsoft Access数据库转换为网络上的SQL Server数据库) , 也可在单一的查询或报表中连接来自多个不同数据库的表。

(2) 数据库存取对象变量 (Data Access Object Variable)

使用DAO访问数据库的对象和方法。

(3) 数据接口法

目前在VB6中有效的数据访问接口方法中, 有些是简单的应用程序接口界面 (APIs) , 有些是组件对象模型界面 (COM) 。这两类数据库接口界面事实上在任何一种开发语言中都包括。

三、总结

近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样, Visual Basic访问数据库的解决方案面临诸多挑战。为此Microsoft提出一种新的数据库访问策略, 即“统一数据访问” (Universal Data Access) 的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源, 提供独立于开发工具和开发语言的简单的编程接口, 这些技术使得企业集成多种数据源、选择更好的开发工具应用软件、操作平台、建立容易维护的解决方案成为可能。“统一数据访问” (Universal Data Access) 的基础是Microsoft的数据访问组件。这些组件包括ActiveX Data Objects (ADO) 、Remote Data Service (RDS也称“高级数据连接器”或ADC) 、OLE DB和ODBC。总之, 在VB中访问数据库的方法很多, 根据具体的环境、条件、要求而采用适当的方案。

参考文献

[1].冷向君.Visual Basic中文版入门与提高[M].北京:清华大学出版社, 1998

[2].李昭原, 罗晓沛.数据库技术新进展[M].北京:清华大学出版社, 1997

[3].Steven Holzner.Visual Basic6.0技术内幕[M].北京:机械工业出版社, 1997

[4].Jiawei Han, Miccheline Kamber.数据挖掘概念与技术[M].北京:机械工业出版社

VB访问数据库的方法 第5篇

SQL Server是微软推出的中小型网络数据库系统, 是目前最常用的数据库系统之一。随着SQL Server网络数据库应用程序日益增多, 这种Web数据库应用系统的正常运行一般依赖于已存在的用户数据库。Visual Basic作为一种面向对象的可视化编程工具, 具有简单易学、灵活方便和易于扩充的特点。而且Microsoft为其提供了与SQL Server通信的API函数集及工具集, 因此, 它越来越多地用作大型公司数据和客户机服务器应用程序的前端, 与后端的Microsoft SQL Server相结合, VB能够提供一个高性能的客户机服务器方案。

1 VB访问SQL Server数据的常用方法

使用Visual Basic作为前端开发语言, 与SQL Server接口有以下几种常用的方法, 即:

1.1 数据访问对象/Jet

VB支持Data Access Objects (DAOs) 的子集。DAO的方法虽然不是性能最好的管理客户机服务器之间的对话方式, 但它的确有许多优点。DAO/Jet是为了实现从VB访问Access数据库而开发的程序接口对象。使用DAOs访问SQL Server的过程如下:应用程序准备好语句并送至Jet, Jet引擎 (MASJT200.DLL) 优化查询, 载入驱动程序管理器并与之通讯, 驱动程序管理器 (ODBC.DLL) 通过调用驱动器 (SQL-SRVR.DLL) 的函数, 实现连接到数据源, 翻译并向SQL Server提交SQL语句且返回结果。

1.2 利用ODBC API编程

ODBC (Open Database Connectivity) 的思想是访问异种数据库的一种可移植的方式。与数据资源对话的公用函数组装在一个称为驱动程序管理器 (ODBC.DLL) 的动态连接中。应用程序调用驱动程序管理器中的函数, 而驱动程序管理器反过来通过驱动器 (SQLSRVR.DLL) 把它们送到服务器中。

1.3 使用VBSQL对DB库API编程

DB库是SQL Server的本地API, SQL Server的Visual Basic库 (VBSQL) 为Visual Basic程序员提供API。从一定意义上说, VB-SQL是连接Visual Basic程序到SQL Server的性能最好、最直接的方式。VBSQL包含以下三个文件:

(1) VBSQL.VBX:包含库函数, 具有访问重要的消息和处理错误的能力;

(2) VBSQL.BI:包括所有的常量和变量说明;

(3) VBSQL.HLP:Windows帮助文件, 使用VBSQL的指南。

使用VBSQL时, 必须将VBSQL.BI加入到Visual Basic工程文件中, 并确保VB程序运行时有VBSQL.VBX文件。一般的DB库API编程的过程是这样的:先通过调用Sql Init对DB库进行初始化, 再调用Sql Connection打开一个连接, 然后就可做一些工作。

1.4 RDO远程数据对象 (Remote Data Ob-jects)

要讨论RDO, 就必然要谈到DAO。RDO是从DAO派生出来的, 但两者很大的不同在于其数据库模式。DAO是针对[记录 (Records) ]和[字段 (Fields) ], 而RDO是作为[行 (Rows) ]和[列 (Columns) ]来处理。也就是说DAO是ISAM模式, RDO是关系模式。此外DAO是访问Access的Jet引擎 (Jet是ISAM) 的接口, 而RDO则是访问ODBC的接口。

可见, RDO是综合了DAO/Jet、VBSQL/DBLib以及ODBC的优点的对象 (Object) 。需要强调的是, RDO是包裹着ODBC API的一层薄薄的外壳, 被设计成在后台 (服务器端) 有数据库存在的前提下运行, 同时, 也是针对SQL Server和Oracle而特别设计的。

RDO的优势在于它完全被集成在VB之中。此外, 直接访问SQL Server存储过程, 完全支持T-SQL, T-SQL调试集成在开发环境中, Visual Database Tools的集成化等, 也是RDO的长处。

在RDO的对象和集合中, 有很多对数据库的状态和设定进行操作的属性 (Property) 以及对数据库进行操作的方法 (Method) 。利用这些, 从RDO2.0起就可以开发事件驱动的数据库应用程序。

RDO对象与VB中其他对象的概念相同。与VB用的Active X控件 (以往称为Custom Control或OCX、VBX) 相似的是, RDO也带有属性和方法;但同Spread、Input Man等普遍应用的Active X控件不同的是, RDO没有自己的用户界面, 因而可以和VB标准的Timer控件归为同一类。当然也可以将RDO看作调用ODBC API函数, 进而对后台数据库操作加以控制的对象。

1.5 ADO数据对象 (Active Data Objects)

ADO是基于全新的OLE DB技术, OLE DB可对电子邮件、文本文件、复合文件、数据表等各种各样的数据通过统一的接口进行存取。随着Active X控件的升级 (Windows 98的Active X 5.0) , RDO将被以Active X技术为基础的ADO接口所替代。

2 性能比较及应用说明

用VB开发基于SQL Server的数据库系统, 以上几种访问SQL Server的方法各有各的特点。DAOs方法是基于对象的, 因而便于使用, 但是它是从Visual Basic到SQL Server最慢的连接方式。ODBC API和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性好, 允许最强的互操作性, 编程简单, 但速度慢于VBSQL方法。VBSQL方法通过VBSQL控件, 提供了重要的SQL Server前端应用程序所需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力, 完全支持异步处理、游标和计算列等。这些都是VBSQL方法超出其它方法的优势, 但其编程稍复杂。RDO是位于ODBC API之上的一个对象模型层, 它依赖ODBC API、ODBC驱动程序以及后端数据库引擎来实现, 用RDO所需的程序短小 (约250 KB) 、快速。RDO具备基本的ODBC处理方法, 可直接执行大多数ODBC API函数, RDO包含在VB 4.0/VB 5.0企业版中, 由MSRDO32.DLL动态连接库来实现。RDO是综合了DAO/Jet、VBSQL/DBLib和ODBC的优点的对象模型, 包含ODBC API应用层, 设计为在后台 (服务器端) 有数据库存在的前提下运行, 是针对SQL Server和Oracle而特别设计的。RDO的优势在于它完全被集成在VB之中, 可直接访问SQL Server存储过程, 完全支持T-SQL, T-SQL调试集成在开发环境中, Visual Database Tools的集成化等。但微软已宣布今后不再对VBSQL/DBLib进行升级, 而ODBC API函数一般的编程方式也不为人们所喜爱, RDO的应用将逐渐减少。至于实际使用哪一种接口方式, 在很大程度上依赖于用户的应用程序的具体情况而定。

3 Visual Basic访问数据库的前景

近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样, Visual Basic访问数据库的解决方案面临诸如快速提取分布于企业内部和外部有用商业信息等的多种挑战。为此Microsoft提出一种新的数据库访问策略, 即“统一数据访问” (Universal Data Acces_s) 的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源, 提供独立于开发工具和开发语言的简单的编程接口, 这些技术使得企业集成多种数据源, 选择更好的开发工具、应用软件、操作平台, 建立容易维护的解决方案成为可能。

参考文献

[1]陈艳峰, 高文姬, 邵蕴秋等.Visual Basic数据库项目导航[M].北京:清华大学出版社, 2004.[1]陈艳峰, 高文姬, 邵蕴秋等.Visual Basic数据库项目导航[M].北京:清华大学出版社, 2004.

VB访问数据库的方法 第6篇

目前,油田开发井数据已达到数百万条并在日益增加,想要快速便捷的访问数据库并提取所需数据已经成为石油地质人员日常工作中必不可缺的环节。但是由于其自身对SQL语言不了解,无法直接对数据库进行查询和修改。因此,我们为其编制一个接口软件实现对Oracle数据库中开发数据的可视化操作。Visual Basic作为一种面向对象的通用程序设计语言,不仅具有简单易学、方便灵活和易于扩充的特点,而且提供了强大的数据库操作功能。ADO是以ActiveX技术为基础的数据存取方法,它使得客户端应用程序能够通过任何OLE DB访问和操作数据库服务器中的数据。通过ADO对象编程访问油田开发数据库给数据库的应用程序带来了很大的方便。

2 ADO技术简介

ADO是由微软公司开发的最新数据访问接口技术,建立在基于低层数据访问接口OLE DB(Objects Link and Embedding DataBase)技术上的数据对象。ADO技术对OLE DB进行了封装并实现了OLE DB的所有功能,从而避免了在VB应用程序中直接使用OLE DB接口,编程量大,细节多的缺点,简化了编程。

由于OLE DB是一种新的数据访问方法,它提供了一种统一、通用的访问数据源的低层接口,通过OLE DB可以实现对任意数据源的高性能数据访问,而并不局限于Jet、ISAM或关系数据源,它能够处理任何类型的数据,而不考虑数据的格式和存储方法,因此ADO通过OLE DB可以访问任何类型的数据源。

现在可用的数据访问接口有3种,即ADO(ActiveX Data Objects)、RDO(Remote Data Objects)和DAO(Data Access Objects)。ADO扩展了DAO和RDO所使用的对象模型,它可以在任何微软产品,如VB、VC、VJ等软件中使用,具有功能强、扩展性好、通用性好、效率高、占空间少等特点,其操作更加简单灵活。

ADO的对象包括:连接对象(Connection Object)、命令对象(Command Object)、记录集对象(Recordset Object)、字段对象(Field Object)、记录对象(Record Object)、参数对象(Parameter Object)、错误对象(Error Object)、属性对象(Property Object)和流对象(Stream Object)。其中最为重要的Connection、Command和Recordset。

3 ADO访问油田开发数据库的方法

ADO模型有编程访问和非编程访问两种方式,我们在编制应用接口时采用的是编程访问方式,下面进行详细的讨论。3.1编程访问方式

1)引用ADO对象库,操作为:“工程”“引用”“Microsoft ActiveX Data Objects 2.8 Library”。

2)编写代码连接数据库,打开数据源,建立数据集。油田上通用的数据库类型为Oracle数据库。

Dim cn As New ADODB.Connection//建立Connection对象

Dim rst As New ADODB.Recordset//建立数据库连接对象

Dim Sql As String//定义SQL语句

Dim oratblname As String//定义数据库表名称

Set cn=New ADODB.Connection//初始化连接对象cn.ConnectionString="provider=msdaora.1;user id="+username+";password="+password+";data source="+server+""//建立与oracle的连接cn.Open

Set rst=New ADODB.Connection//初始化记录集对象

Sql="select*from"+oratblname//SQL语句,查询某表的全部内容Rst.CursorLocation=adUseClientRst.Open Sql,cn adOpenStatic,adLockPessimistic//执行SQL语句并建立记录集

3)显示记录集内容。

利用DataGrid控件可以显示记录集的内容。

Set DataGrid1.DataSource=Rst

4)将记录集导出为Excel文件。

为了方便地质人员查看和操作数据库,可以将数据库中的表导出为Excel文件,对Excel表的数据进行修改后,再导入数据库就可以完成数据的加载和修改。下面着重介绍如何将在数据库中查询出的记录集导出为Excel表。

使用DataGrid控件的Columns集合的Count属性和Recordset对象的RecordCount属性,可以决定控件中行和列的数目。选择一个单元格,则ColIndex属性被设置,也就是选择了DataGrid对象的Columns集合中的一个Column对象。Column对象的Text和Value属性引用当前单元格的内容。

Dim irow As Integer//定义irow为Excel表的行数

Dim icol As Integer//定义icol为Excel表的列数

Dim xlApp As Excel.Application//定义xlApp为Excel应用程序对象变量

Dim xlBook As Excel.Workbook//定义xlApp为Excel工作簿对象变量

Dim xlSheet As Excel.Worksheet//定义xlApp为Excel工作表对象变量Set xlApp=CreateObject("Excel.Application")//创建新的Excel应用程序

Set xlBook=xlApp.Workbooks.Add//初始化工作薄

Set xlSheet=xlBook.Worksheets(1)//初始化工作表

If MsgBox("您真的要将资料导出到EXCEL中吗?",vbExclamation+vbYesNo,"提示")=vbYes Then

For icol=0 To Rst.Fields.Count–1//通过循环将数据表的列名赋值给Excel表第一行

xlSheet.Cells(1,icol+1)=Rst.Fields(icol).Name

Next icol

通过记录集的行和列的双循环,将数据集的每一项内容赋值给Excel表项

For irow=1 To Rst.RecordCount

For icol=1 To Rst.Fields.Count

xlSheet.Cells(irow+1,icol).Value=Rst.Fields(icol-1)

Next icol

Rst.MoveNext

Next irow

xlApp.Visible=True//显示Excel表

Else

End If

5)程序退出时,释放所有对象所占用的内存空间。

Private Sub Form_Terminate()

Set cn=Nothing

Set rst=Nothing

Set xlApp=Nothing

Set xlBook=Nothing

Set xlSheet=Nothing

End Sub

4 结束语

在VB中利用ADO对象直接编程来访问各种类型数据库的方法体现了ADO功能强、易于使用、访问灵活的特点。此外,ADO技术的优越性还体现在扩展性好、应用范围广、占用空间少等方面。随着信息化时代的不断深入,信息处理和信息共享变得越来越重要,数据访问技术对于信息系统也就显得尤为重要,本文介绍了在VB编程环境下,利用ADO的编程访问方式查询并导出数据表内容的方法和步骤,不仅为非计算机专业人员操作数据库提供了便利,还提高了数据访问速度。

摘要:介绍了ADO技术和VB中利用ADO的方式访问数据库的优点,并结合油田开发数据库的实例描述了利用ADO访问Oracle数据库的技术和方法,指出掌握ADO访问数据库的方式对开发数据库程序的重要性和便利性。

关键词:VB,ADO,Oracle,油田,数据库访问

参考文献

[1]莫礼平,张兆海.VB中基于ADO的数据库访问方法[J].电脑开发与应用,2004,17(6):33-34.

[2]陈万华,曹争.VisualBasic中两种ADO数据库访问技术的比较[J].微机发展,2003,13(6):53-54.

[3]张宗飞.VB中基于ADO的数据库访问技术分析及应用[J].计算机与数字工程,2008,36(3):53-56.

[4]周欢怀.用VB操作Excel文件[J].电脑学习,2004,4(2):55.

[5]史运平.基于Visual Basic6.0的ADO数据库访问技术[J].计算机与信息技术,2007(22):63-64.

[6]李凌博.基于VisualBasic6.0的ADO数据库编程技术[J].平顶山师专学报,2004,19(2):63-64.

VB访问数据库的方法 第7篇

1 Visual Basic数据库访问技术

使用VB6.0可以创建将每个步骤封装在数据访问系统中的部件。从数据源开始, Microsoft可视化数据工具提供了在SQL和Oracle系统中查看并操作表、视图、存储过程和数据库结构描述的功能[1]。数据源是数据提供程序和数据使用者之间的桥梁, 可以通过ADO (Microsoft Active X Data Objects) 创建数据源。ADO是VB在任何数据源中访问数据的主要方法。

开发基于VB的数据库应用, 可以通过数据访问对象DAO (Data Access Object) 、远程数据对象RDO (Remote Data Object) 和Ac⁃tive X数据对象ADO (Active X Data Objects) 等三种数据访问接口。数据访问接口是一个对象模型, 它代表了访问数据的各个方面。使用VB, 可以在任何应用程序中通过编程控制连接、语句生成器和供使用的返回数据[1]。

对于这三种数据接口, 每一种方法都代表着数据访问技术发展的不同阶段以及逐步完善的过程。ADO技术是最新的接口技术, 比RDO和ADO更加的简单、灵活, 通过较少的对象, 实现了更多的属性、方法及事件的融合。在简化编程的同时, 实现了更高效率的数据访问。

2 ADO数据访问技术

ADO Data控件时VB6.0提供的一个Active X控件, 使用ADO Data控件可以快速建立数据绑定的控件和数据提供者之间的连接[3]。

2.1 VB环境下ADO Data控件的添加

利用ADO Data控件可以实现本地数据库或远程数据的连接;可以打开用户指定的数据库表, 定义基于SQL语言的查询、增删数据库表中的记录集合;还可以传递字段数值给数据绑定的控件, 也可以在控件中显示或修改数值。

要使用ADO Data控件, 需要现在VB下的“工程”菜单上选择“部件”选项, 然后在“部件”对话框中选择“Microsoft ADO Data Control 6.0 (OLEDB) ”选项, 单击确定按钮后, 即可在VB的控件工具箱内使用ADO Data控件。通过该控件就可以直接访问记录集, 移动记录指针, 实现对数据库的操作, 不再需要程序代码的编写。

2.2 ADO Data控件的主要属性

2.2.1 Connection String属性

连接属性用来建立到数据源的连接信息。由于VB的ADO对象模型可以连接不同类型的数据库, 所以在使用ADO Data控件时也可通过这个属性设置要连接的数据库。可以通过三种连接资源选项建立与数据源的连接, 即使用Data Link文件、使用ODBC数据资源名称和使用连接字符串三个选项完成数据链接。

2.2.2 Record Source属性

记录源属性用于设置要连接的表或者SQL查询语句。命令类型选择默认, 在命令文本 (SQL) 中输入SQL语句。如:select*from oper

2.2.3 Command Type属性

用来指定Record Source属性的取值类型。可以直接在属性窗口的Command Source属性的下拉列表中选择需要的类型, 有以下4个不同的取值:

ad Cmd Unknow默认值, 表示命令文本中的命令类型未知。

ad Cmd Table表示将命令类型作为其列全部由内部生成的SQL查询返回的表格的名称进行计算。

ad Cmd Text表示将命令文本作为命令或存储过程调用的文本化定义进行计算。

ad Cmd Store Proc表示将命令文本作为存储过程名进行计算。

3 数据源的创建

3.1 创建SQL Server数据库

在SQL Server 2005中设计一个仓库信息管理数据库, 数据库命名为WMS, 其中设计包含如下数据表:Client (客户表) 、Store⁃house (仓库信息表) 、Oper (用户表) 、Pro Type (产品类目表) 、Product (产品信息表) 、Store In (入库操作信息表) 、Take Out (出库操作信息表) 、Pro In Store (库存产品信息表) 。

3.2 创建数据源

第一步打开控制面板中的管理工具, 双击数据源 (ODBC) , 显示ODBC数据源管理器, 选择“系统DSN”选项卡, 如图1所示。

从系统数据源列表中选择“WMS”选项 (这是在SQL Server中建立的数据库的名称) , 单击“配置”按钮, 出现如图2所示的界面。

第二步从驱动程序列表中选择“SQL Server”选项, 单击“完成”按钮, 按照界面提示, 保持数据源名称为“WMS”, 其他选择默认选项完成数据源的创建。直至ODBC Microsoft SQL Server安装界面的出现, 表示成功配置了新的数据源, 如图3所示。

第三步单击“测试数据源”按钮, 出现如图4所示的SQL数据源测试界面, 界面信息显示命名为WMS的数据源测试成功, 这样在应用程序中就可以使用这个数据源了。

4 VB环境下利用ADO Data控件访问数据库

4.1 数据库表设计

打开SQL Server 2005, 在仓库信息管理数据库WMS中添加oper表。该表用来存放本系统用户的信息。基本数据包括用户名、密码和用户级别三项, 用户级别分为“一般操作员”和“系统管理员”两类。oper表结构如图5所示。

4.2 系统实现

4.2.1 新建工程

打开VB编辑器, 点击新建工程, 工程命名为Warehouse.vbp。首先在工程中添加公共模块Moudule1.Bas, 其中包含一些被本工程中一些窗体所调用的全局变量和过程;然后在工程中添加各个窗体, 系统结构如图4.2所示。

公共模块Moudule1.Bas代码如下:

4.2.2 登录窗口设计

pass窗体用来接受用户的用户名及口令输入, 并判断用户的合法性。如果是合法用户, 系统会自动释放该窗体并启动main窗体;否则释放窗体而不启动main窗体。该窗体运行结果如图6所示。

4.2.3 ADO Data控件在设置系统用户界面的使用

在工程中添加一个设置系统用户窗体setuser.frm, 这个窗体用来添加、删除和修改使用本系统的用户, 设计界面如图7所示, 其中包含一个ADO Data控件adodc1、一个Data Grid控件Data Grid1和四个命令按钮。

其中ADO Data控件adodc1的属性设置应该是:Caption=“adodc1”;Connection String=“DSN=WMS”;User Name=“sa”;Pass⁃word=“”;Record Source=“select*from oper”;Visible=“False”。

Data Grid控件Data Grid1的属性设置如下:Caption=“Data Grid1”;Data Source=“adodc1”。在Data Grid1窗体上单击鼠标右键, 选择“检索字段”选项, 这样就设立好了Data Grid1控件的数据源为adodc1, 从而建立了控件与数据表的数据绑定, 以显示oper表中的一系列行和列表示的记录集对象的记录和字段。通过Data Grid控件可以直接对记录集进行访问, 移动记录指针, 不需要编写代码即可实现对数据库的操作[3]。

窗体中四个命令按钮的作用:“添加”按钮用来添加新的系统用户;“修改”按钮用于修改当前用户的信息;“删除”按钮用于删除当前用户;“返回”按钮用于返回系统。

设置系统用户 (setuser) 窗体运行界面如图8所示, oper表中有两条记录。

如果用户选择“添加”按钮, 运行界面如图9所示。用户可以在“用户名”和“口令”处分别填入新建用户的信息, 并在用户级别下拉列表中进行选择“一般操作员”或“系统管理员”。然后单击“确定”按钮, 显示添加结果。如图9所示, 用户名为“SWF”、密码为“0101”、用户级别为“一般管理员”的新系统用户信息已成功添加到本系统中。

5 结束语

ADO的优势在于前端和数据源之间使用层数最少和轻量、高性能的数据访问接口, 并可通过ADO Data控件访问各种数据库。因此, ADO是如今使用最广泛、应用最成功的数据访问技术。不仅在C/S (客户端/服务器) 架构的数据库应用程序中得到认可, 在日益风靡的B/S (浏览器/服务器) 架构的Internet交互式站点建设中, 也深受开发者的青睐[4]。

笔者通过利用VB和SQL Server 2005成功开发了一个仓库信息管理系统, 实现了完全面向对象的可视化编程, 其方法简便、直观、快捷。并通过本文介绍了ADO数据访问技术, 详细讲述了ADO Data控件在VB的使用, 实现了简单快速建立控件的数据绑定及数据库的访问。

摘要:随着数据库开发技术的广泛应用, 利用Visual Basic进行C/S应用程序开发是目前较为典型的做法。该文通过一个仓库信息管理系统的设计和开发, 详细介绍了在VB环境下, 利用ADO接口技术实现与SQL Server 2005数据库连接及访问的过程。

关键词:VB,数据库访问,ADO技术

参考文献

[1]李晓黎, 张巍.Visual Basic+SQL Server数据库应用系统开发与实例[M].北京:人民邮电出版社, 2003:63-121.

[2]李哲, 许树勤, 李占青.数据库的选择及ADO技术的应用[J].机械工程与自动化, 2004 (3) .

[3]李春葆, 张植民.Visual Basic数据库系统设计与开发[M].北京:清华大学出版社, 2003.

VB访问数据库的方法 第8篇

关键词:ORACLE数据库,军卫一号,HIS,并发访问,访问冲突

0 前言

作为全球知名的关系型数据库产品, ORACLE数据库以其出色的数据库管理能力、超强的稳定性、良好的并发控制机制而闻名。ORACLE数据库系统本身是一个多用户并发处理系统, 任何一个时间节点内都可能有许多用户同时访问和操作同一个数据库对象。因此, 并发访问控制是数据库最核心的管理机制之一, 也是在数据库运行过程中容易出现错误和故障的地方。本文对ORACLE数据库并发访问控制机制展开探讨, 并就实际工作中容易产生的并发性错误提出相应的解决方法。

1 闩锁和锁定机制

ORACLE数据库通过闩锁 (latch) 和锁定 (lock) 两种机制来解决并发性访问问题[1]。闩锁是一个低级别、轻量级的锁, 获得和释放的速度很快, 以类似信号灯的方式实现。锁定可能持续的时间很长, 通过使用队列, 按照先进先出的方式实现。可以认为闩锁用于微观领域, 而锁定用于宏观领域。

1.1 闩锁

ORACLE数据库使用闩锁来管理内存、数据块的分配和释放。当某个用户进程 (假定为A) 要对一个数据块 (block) 进行写操作时, 将先获得该数据块的闩锁, 在其写操作完成之前, 该闩锁将被此用户进程独占, 此时如果有其他进程 (假定为B) 试图对此数据块进行写操作, 会因无法获得闩锁而被迫进入等待状态, 当A进程结束操作时将释放闩锁, B进程可以获得闩锁开始对数据块进行读写操作。闩锁不仅用于数据块读写管理, ORACLE中任何涉及到内存地址的读写操作都要通过获得闩锁来实现串行化, 一次只能有一个服务器进程在读或写内存地址[2]。闩锁分两种类型:愿意等待 (Willing-To-Wait) 和不等待 (No-Wait) 。大部分闩锁属于第一种类型。当进程无法获得闩锁时, 会绕着CPU旋转一段时间 (以μs来计算) 并再次尝试获得闩锁, 当反复旋转CPU并尝试获取闩锁的次数超过某个上限 (该上限由隐藏参数控制) 时, 该进程才会释放CPU并进入睡眠状态, 同时产生一个对应的等待事件并记录在视图V$session_wait里。No-Wait型闩锁较少见。当进程请求此类闩锁时, 若请求失败, 进程将不会旋转CPU而直接转向另一个闩锁的申请。

1.2 锁定

锁定用来控制多用户对数据库表的相同数据的并发访问。锁定分TX锁 (TX锁) 和表级锁 (TM锁) 。当用户进程找到被更新数据块的相应数据行时, 在其头部设置一个行级锁, 并在头部记录当前事务所使用的ITL槽的槽号。其他用户进程如果要更新此数据行的数据, 将发现该条记录已经被添加了行级锁而进入等待状态, 直到前面的进程完成更新操作并释放TX锁为止。由此可见, TX锁是一种排他锁 (X锁) , 即一旦用户对某个资源添加了X锁, 则其他用户都不能对该资源添加任何类型的锁, 直到该用户释放了资源上的X锁为止。用户对表数据进行更新时, 不仅会在数据行的头部记录行级锁, 而且还会在表的级别上添加一个TM锁。TM锁共5种模式[3]: (1) 行级排他锁 (RX锁) :DML操作会自动在被更新的表上添加RX锁。该模式允许其他事务通过DML语句修改相同表里的其他数据行, 但不允许其他事务对相同的表添加X锁; (2) 行级共享锁 (RS锁) :通过selectfrom

for update语句可以添加RS锁, 该锁不允许其他事务对相同的表添加X锁, 但允许其他事务通过DML语句锁定相同表里的其他数据行; (3) 共享锁 (S锁) :通过lock table

in share mode命令添加该S锁。该锁不允许任何用户更新表, 但允许其他用户对表添加RS锁; (4) X锁:通过lock table

in exclusive mode命令添加该X锁, 该锁不能对表进行任何的DML和DDL操作, 只能对该表进行查询; (5) 共享行级排他锁 (SRX锁) :通过lock table

in share row exclusive mode命令添加SRX锁, 该锁不能对相同的表进行DML操作, 也不能添加共享锁。

2 锁定的相关视图

ORACLE数据库借助以下几个数据字典来管理锁定问题[4]:

(1) V$transaction:该视图记录当前每个活动事务的信息。其中比较重要的字段包括XIDUSN (当前事务使用的回滚段的编号) 、XIDSLOT (事务在回滚段头部的事务表中对应的记录编号) 、XIDSQN (序列号) 。

(2) V$lock:该视图记录了当前对话已经获得的锁定以及正在请求的锁定信息。其中比较重要的字段包括SID (session的ID号) 、TYPE (锁定的类型和级别) 、REQUEST (正在请求的锁定模式) 、BLOCK (是否阻止了其他用户获得锁定) 。

(3) V$locked_object:该视图记录当前已经被锁定的对象信息, 其中比较重要的字段包括XIDUSN (当前事务使用的回滚段的编号) 、XIDSLOT (事务在回滚段头部的事务表中对应的记录编号) 、XIDSQN (序列号) 、OBJECT_ID (当前被锁定对象的ID) , LOCKED_MODE (锁定模式的数字编码) ) 。

(4) V$session:记录当前session的相关信息。其中比较重要的字段包括SID (session编号) 、SERIAL# (序列号) , SID和SERIAL#共同标识一个session。

3 并发访问冲突的现象、原因、检测和解决方法

3.1 并发访问冲突的现象

笔者所在的单位是一所部队医院, 运行的是“军卫一号”医院信息系统, 该系统以ORACLE为数据库管理系统 (目前版本是10g) , 开发环境是Power Builder9.0, 并发用户数在400台左右。在长期的数据库维护管理工作中, 笔者经常遇到并发访问冲突的问题。表现为:某一台或几台机的用户在进行程序操作特别是进行数据保存时死机 (鼠标呈沙漏状) , 此时系统不会有任何错误提示, 若用户强行结束任务后重新进行上述操作仍然失败, 最极端的情况是所有写某个数据表的用户都会死机。

3.2 原因

造成上述访问冲突的原因一般有以下两种[5]:

(1) 应用程序中的BUG。Power Builder经常通过数据窗口技术 (datawindow) 来实现对数据的读写。当数据窗口完成一次数据更新后, 要通过resetupdate () 函数来进行数据窗口更新状态的复位。否则数据窗口在进行多次数据读写操作后很容易出现更新数据但不提交的现象 (即对某数据表UPDATE后没有COMMIT) , 当其他用户或程序也对该表的相同行数据进行写操作时, 就会把用户锁定。

(2) 客户端的电脑故障。当客户端对数据表进行读写操作时, 如果此时客户端电脑发生故障, 如WINDOWS系统死机等, 此时该用户的COMMIT动作没有完成。其他用户如果也在访问该表的相同数据行, 则很容易产生锁定。

3.3 检测和解决方法

笔者通过一个具体的例子来阐述并发访问冲突的解决方法。假设A用户在SQL_PLUS中执行语句:update dept_dict set dept_name=’aaa’where dept_code=’1001’;然后B用户执行语句:update dept_dict set dept_name=’bbb’where dept_code=’1001’, 此时B用户的SQL语句运行将出现死机。当执行select*from v$locked_object语句, 查出当前被锁住会话的session_ID是9和11。再执行语句select sid、type、ID1、ID2、lmode、request、block from v$lock where sid in (9, 11) , 查询结果, 见表1。

从表1可知, A用户的SQL语句 (即SID=9的会话) 已经在DEPT_DICT表中添加了TX锁和TM锁, 当B用户执行自己的SQL语句 (即SID=11的会话) 时也往该表的同一条记录添加TX锁和TM锁。TM锁添加成功, 添加TX锁时由于该行记录已被A用户的会话锁住且尚未释放, 所以添加失败, 因此第4行记录的Lmode字段值为0, 表示TX锁未添加成功, 同时第1行记录的Block字段值为1, 表示sid=9的会话的TX锁阻止了其他用户获得此锁。查明是由于sid=9的会话阻塞了sid=11的会话获得锁定后, 我们就可以进行解锁操作了。通常的解锁操作有两种:一种是将前面会话的SQL操作正常提交, 即运行COMMIT语句, 当A用户的SQL操作完成后自动会将TX锁和TX排他锁释放, B用户即可获得该条记录的TX锁并完成自己的SQL操作。第二种方法是将前面会话删掉, 此方法用于前面会话已经无法正常提交的情况。以本例而言, 可执行语句:select sid, serail#from v$session where sid=9, 查出sid=9的会话serial#=189;然后运行语句:alter system kill session (9, 189) , 将A用户的会话强行删除, 该会话自动释放TX锁和TM锁, 这样B用户即可获取相应锁并完成自己的SQL操作。

4 结束语

综上所述, ORACLE数据库主要是通过闩锁和锁定机制来实现对数据库并发访问的控制, 前者基于内存和数据块层面, 属微观范畴;后者基于数据表和记录, 属宏观领域。同时ORACLE提供了若干数据字典和视图, 方便数据库管理员 (DBA) 实时了解数据库当前的用户连接和锁定状况, 共同为ORACLE用户提供强大的并发控制机制和高效的并发管理能力。

参考文献

[1]余钢, 朱莉, 张云睿.ORACLE DML封锁等待原因分析和应用中的处理方法[J].电脑知识与技术, 2005, (10) :42-43.

[2]萨师煊, 王珊.数据库系统概论[M].3版.北京:高等教育出版社, 2000.

[3]沈金发, 郑甫京, 王令赤, 等.ORACLE关系数据库系统[M].北京:清华大学出版社, 1992.

[4]韩思捷.ORACLE数据库技术实用详解[M].北京:电子工业出版社, 2008.

[5]滕永昌.ORACLE9I数据库管理员使用大全[M].北京:清华大学出版社, 2004.

[6]周芃, 顾凤军, 周昕.ORACLE闪回技术的使用与分析[J].中国医疗设备, 2009, 24 (2) :51-53.

浅析访问数据库的编程方法与比较 第9篇

1 两类访问数据库的方法

1.1 第一类接口对象法 (API)

下面介绍各种数据访问接口功能及含义:

ADO:Active数据对象 (Active Data Objects) :ADO实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式, 通过ODBC的方法同数据库接口。

DAO:数据访问对象 (Data Access Objects) :是一种面向对象的界面接口。通过DAO/Jet功能可以访问ISAM数据库, 使用DAO/ODBCDirect功能可以实现远程RDO功能。使用DAO的程序编码非常简单, DAO提供丰富的游标 (Cursor) 类型的结果集和非游标 (Cursor-Less) 类型的结果集, 同DDL (数据描述语言) 的功能很类似。

DAO模型是设计关系数据库系统结构的对象类的集合。它们提供了完成管理这样一个系统所需的全部操作的属性和方法, 包括创建数据库, 定义表、字段和索引, 建立表间的关系, 定位和查询数据库等工具。

RDO:远程数据对象 (Remote Data Objects) :远程数据对象和集合为使用代码来创建和操作一个远程ODBC数据库系统的各个部件提供了一个框架。对象和集合都具有描述数据库的各个部件特征的属性以及用来操作这些部件的方法。可以在对象和集合之间建立起关系, 这些关系就代表了数据库系统的逻辑结构。RDO是ODBCAPI的一个浅层界面接口。是专为访问远程ODBC关系数据源而设计的。

VBSQL:是Visual Basic结构化查询语言。是一种基于API的接口方法, 几乎与C的DB-Library API相同。VBSQL只支持微软的SQLServer。VBSQL快而且轻但不支持对象界面。

1.2 数据控件法

Data Control:DAO/Jet数据界面接口

该控件连接一个记录集 (Recordset) 与数据库, 并处理记录。Data控件上有四个按钮, 从左到右依次是:移到第一条记录、移到上一条记录、移到下一条记录、移到最后一条记录。DBCCombo、Dblist、DBGrid和MSFlex Grid控件可与Data控件绑定共同管理记录集, 显示或操作记录, Picture、Label、Text Box、Image、Listbox和Combo Box控件可连接Data控件共同管理的记录集的单一字段绑定, 显示当前记录。

Data控件重要属性及相关使用方法如下:

Connect属性定义Data控件连接Access时, 定义数据库名。连接Fox Pro或d Base时, 定义数据库文件目录名。

Database Name属性当Data控件连接Access时, 定义数据库名。连接Fox Pro或d Base时, 定义数据库文件的目录名。

Record Sourse属性定义Data控件使用的数据表名。

Record Set属性指定或返回与Data控件对应的保存有Data控件查询结果记录集的Record Set对象。

使用Data控件访问数据库的方法:

首先用其连接数据库, 然后设置绑定控件属性以及显示及修改数据。Text Box控件可以简单地实现绑定, 其Data Sourse属性指定连接的数据源。对于Data控件, 该属性必须在设计时赋值。其Data Field属性指定显示的字段。使用Data控件和Text Box控件访问数据库的步骤如下:

设置Data控件的Control属性指定数据库的类型;

设置Data控件的Database Name属性指定数据库的文件名;

设置Text Box控件的Data Field属性指定数据源;

设置Text Box控件的Data Field属性指定与该控件连接的数据字段。

2 两类方法性能比较及应用说明

两类方法及常用方法可作如下划分图:

2.1 数据控件Data

数据控件Data连接数据库是最简单的方法。只须设置该控件的Connect、Data等属性即可完成连接。可以用Data控件的Recordset对象的Add New、Edit、Delete等方法, 使其完成数据指针移动等操作, 实现增加、修改、删除记录等数据库的基本操作。使用Data控件也有局限性, 只能连接Access、d Base、Fox Pro等预定义数据库。

在VB中如果使用DATA控件访问数据库, 那么程序执行必须要一些大型DLL支持。这对于安装盘的发放是一个有待探讨的问题。

2.2 接口对象法 (API)

接口对象比较多, 常见有六种 (见图1) 。在此举出四例:

(1) ADO:Active数据对象 (Active Data Objects) :可以使用任何一种ODBC数据源, 即不止适合于SQLServer、Oracle、Access等数据库应用程序, 也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术, 因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。ADO使得客户端应用程序能够通过任何OLE DB提供者来访问和操作数据库服务器中的数据。ADO最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。

(2) DAO (Data Access Object) :数据库访问对象, 在Visual Basic 6.0提供的一个对象库中。使用该对象可以访问Access、d Base、Fox Pro等数据库, 也可访问ODBC数据库。

(3) RDO (Remote Data Object) :RDO最强大和最重要的特性之一是:它可以查询和处理由存储过程返回的结果, 无论它有多么复杂。RDO是ODBC API之上的一个对象层, 其依赖ODBC API、ODBC驱动程序和数据服务引擎, 实现了对更多类型的数据库访问。RDO本身具有短小、快速的特性。

(4) VBSQL只支持微软的SQLServer。VBSQL快而且轻但不支持对象界面。

3 各方法性能比较

应具体问题具体分析, 根据具体的环境、条件、要求而采用适当的方案。主要看代码的重用和运行的效率、实现的简便性, 易维护性及安全性。

用VB开发基于SQL Server的数据库系统, 以上几种访问SQL Server的方法各有各的特点。DAO方法是基于对象的, 因而便于使用, 但是它从Visual Basic到SQL Server的最慢的方式。ODBC API和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性好, 允许最强的互操作性, 编程简单, 但速度慢于VBSQL方法。VBSQL方法通过VBSQL控件, 提供了重要的SQL Server前端应用程序所需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力, 完全支持异步处理、游标和计算列等。这些都是VBSQL方法超出其它方法的优势, 但其编程稍复杂。RDO的优势在于它完全被集成在VB之中, 可直接访问SQL Server存储过程。但微软已宣布今后不再对VBSQL/DBLib进行升级, 而ODBC API函数一般的编程方式也不为人们所喜爱, RDO的应用将逐渐减少。

Visual Basic 6.0访问数据库的种类繁多的方法究竟有何不同, 孰优孰劣?这里从多方面对各种方法进行了性能比较。归纳了在具体应用中使用各种方法的原则。该问题还有待进一步探讨。

摘要:详细介绍了两类VB对数据库编程的常用方法, 并对两类方法的性能进行了比较, 总结了各类方法在VB中对数据库编程的使用原则。

VB访问数据库的方法

VB访问数据库的方法(精选9篇)VB访问数据库的方法 第1篇关键词:Visual Basic,数据库Visual Basic语言是一门基础的编程语言,Visual Ba...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部