日期:2009-10-04  浏览次数:20397 次

一、VB访问数据库的原则

总则:具体问题具体分析,根据具体的环境、条件、要求而采用适当的方案

*代码的重用和运行的效率

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

*实现的简便性,易维护性

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

*安全性原则

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

二、VB访问数据库的方法

VB访问数据库的方法很多,一般情况下分成两大类,而每一类又有很多方法。

数据访问接口功能及含义:

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

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

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

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

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

0DBC:开放式的数据库连接(OpenDatabaseConnectivity):是一种公认的关系数据源的接口界面。它快而轻并且提供统一接口的界面,ODBC对任何数据源都未作优化。

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

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

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

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

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

使用RDO的一般方法如下:

先声明变量:

PublicconAsrdoConnection,resAsrdoResultset

然后初始化rdoEngine,设置用户和口令等缺省参数;WithrdoEngine

.rdoDefaultUser="sa"注释:用户为sa

.rdoDefaultPassword="pass"注释:口令为pass

.rdoDefaultCursorDriver=rdUseServer

.rdoDefaultLoginTimeout=15

EndWith

再连接到要访问的远程数据库(可使用DSNConnection和DSN-LessConnection)。

使用DSNConnection举例(连接服务器SERVER上的数据库hotel):

Setcon=rdoEnvironments(0).OpenConnection

("hotel",rdDriverNoPrompt,False)

使用DSN-LessConnection举例(连接服务器SERVER上的数据库hotel):

Setcon=rdoEnvironments(0).OpenConnection

("",rdDriverNoPrompt,False,_"driver={SQLServer};server=SERVER;database=hotel")

建立连接后,既可使用OpenResultset方法执行查询并处理结果集,又可使用Execute方法执行包括数据定义和数据操作在内的动作查询。例如:

Setres=con.OpenResultset("SELECT*FROMmenu",rdOpenStatic)

con.Execute"CREATEVIEWmenu_viewASSELECT代码,菜名FROMmenu",rdExecDirect

RDO最强大和最重要的特性之一是:它可以查询和处理由存储过程返回的结果,无论它有多么复杂。除RDO外,还可使用RDC访问远程数据库。

远程数据控件(RDC)与数据控件(DC)类似,不同之处是RDC使用RDO连接到ODBC驱动程序管理器,而DC则使用DAO连接到Jet数据库引擎。利用RDO和RDC,无需使用Jet引擎就可以访问ODBC数据源。这样,在访问远程数据库时,可以获得更好的性能和更大的灵活性。

远程数据控件MSRDC使用举例如下:

Connect:driver={SQLServer};server=SERVER;database=hotel

DataSourceName:

SQL:SELECT*FROMmenu

UserName:sa

Password:pass

CursorDriver:3-rdUseClient

可以使用RDC执行许多简单的远程数据访问操作,不需编写任何代码,只要填写有关项就可以了,使用起来很方便。但应注意,除非在设计时禁止并只在需要时启动RDC,否则它至少将消耗一个远程数据库连接。在远程数据库连接资源有限或要求很高效的情况下,宜慎用、少用RDC。这种情况下,应尽可能考虑使用RDO,并使用存储过程(预编译好的SQL语句)。

最后还应注意,只有32位操作系统(如WindowsNT或Windows95),才能支持RDO和RDC。RDO和RDC也只能用于访问32位ODBC数据源。