更新时间:2022-08-25 13:04
随着数据库技术的广泛应用,开发各种数据库应用程序已成为计算机应用的一个重要方面。VB具有强大的数据库操作功能,提供了数据管理器(Data Manager)、数据控件(DataControl)和ADO(Active Data Object)数据对象等工具,使编程人员可以轻松地开发出各种数据库应用程序。当前各种主流数据库有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。数据库编程是对数据库的创建、读写等一列的操作。数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;数据库服务端编程主要使用OLE DB等方法。数据库编程需要掌握一些访问数据库技术方法,还需要注意怎么设计高效的数据库、数据库管理与运行的优化、数据库语句的优化。
数据库按其结构可分为三种类型:网状数据库、层次数据库和关系数据库。其中关系数据库是一种应用最广泛的数据库。
数据库编程分为数据库客户端编程与数据库服务器端编程。数据库客户端编程主要使用ODBC API、ADO、ADO.net、OCI、OTL等方法;数据库服务端编程主要使用OLE DB等方法。
1、几种是数据库访问方法比较
ODBCAPI是一种适合数据库底层开发的编程方法,ODBCAPI提供大量对数据源的操作,ODBCAPI能够灵活地操作游标,支持各种帮定选项,在所有ODBC相关编程中,API编程具有最高的执行速度。
DAO提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过Access/Jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
OLEDB提供了COM接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
ADO最主要的优点在于易于使用、速度快、内存支出少和磁盘遗迹小。
ADO.Net是利用数据集的概念将数据库数据读入内存中,然后在内存中对数据进行操作,最后将数据集数据回写到源数据库中。
OTL 是oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库, OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。具有以下优点:跨平台;运行效率高,与C语言直接调用API相当;开发效率高,起码比ADO.net使用起来更简单,更简洁;部署容易,不需要ADO组件,不需要.net framework等。
VC数据库编程几种方法,包括ODBC连接、MFC ODBC连接、DAO连接、OLEDB、OLE DB Templates连接、ADO、Oracle专用方法(OCI(OracleCallInterface)访问、OracleObjectOLEC++ClassLibrary )。
ODBC(Open DataBase Connectivity)是MSOA的一部分,是一个标准数据库接口。它提供对关系数据库访问的统一接口,实现对异构数据源的一致访问。
ODBC数据访问由以下部分组成:
<1>句柄(Handles):ODBC使用句柄来标识ODBC环境、连接、语句和描述器.
<2>缓存区(Buffers):
<3>数据类型(Data types)
<4>一致性级别(Conformance levels)
用ODBC设计客户端的一般步骤:
<1>分配ODBC环境
<2>分配连接句柄
<3>连接数据源
<4>构造和执行SQL语句
<5>获得查询结果
<6>断开数据源的连接
<7>释放ODBC环境
ODBC API是一种适合数据库底层开发的编程方法,ODBC API提供大量对数据源的操作,ODBC API能够灵活地操作游标,支持各种帮定选项,在所有ODBC相关编程中,API编程具有最高的执行速度.因此,ODBC API编程属于底层编程。
MFC ODBC是MFC对ODBC进行的封装,以简化对ODBC API的 调用,从而实现面向对象的数据库编程接口.
MFC ODBC的封装主要开发了CDatabase类和CRecordSet类
(1) CDatabase类
CDatabase类用于应用程序建立同数据源的连接。CDatabase类中包含一个m_hdbc变量,它代表了数据源的连接句柄。如果要建立CDatabase类的实例,应先调用该类的构造函数,再调用Open函数,通过调用,初始化环境变量,并执行与数据源的连接。在通过Close函数关闭数据源。
CDatabase类提供了对数据库进行操作的函数及事务操作。
(2) CRecordSet类
CRecordSet类定义了从数据库接收或者发送数据到数据库的成员变量,以实现对数据集的数据操作。
CRecordSet类的成员变量m_hstmt代表了定义该记录集的SQL语句句柄,m_nFields为记录集中字段的个数,m_nParams为记录集所使用的参数个数。
CRecordSet的记录集通过CDatabase实例的指针实现同数据源的连接,即CRecordSet的成员变量m_pDatabase.
MFC ODBC编程更适合于界面型数据库应用程序的开发,但由于CDatabase类和CRecordSet类提供的数据库操作函数有限,支持的游标类型也有限,限制了高效的数据库开发。在编程层次上属于高级编程。
DAO(Data Access Object)是一组Microsoft Access/Jet数据库引擎的COM自动化接口.DAO直接与Access/Jet数据库通信.通过Jet数据库引擎,DAO也可以同其他数据库进行通信。DAO还封装了Access数据库的结构单元,通过DAO可以直接修改Access数据库的结构,而不必使用SQL的数据定义语言(DDL)。
DAO的体系结构如下:
DAO封装的类:
(1)CdaoWorkspace:对DAO工作区(数据库处理事务管理器)的封装
(2)CdaoDatabase:对DAO数据库对象的封装,负责数据库连接.
(3)CdaoRecordset:对DAO记录集对象的封装,代表所选的一组记录.
(4)CdaoTableDef:对表定义对象的封装,代表基本表或附加表定义.
(5)CdaoQueryDef:对查询对象的封装,包含所有查询的定义.
(6)CdaoException:DAO用于接收数据库操作异常的类.
DAO提供了很好的数据库编程的对象模型.但是,对数据库的所有调用以及输出的数据都必须通过Access/Jet数据库引擎,这对于使用数据库应用程序,是严重的瓶颈。
DAO相对于ODBC来说,属于高层的数据库接口.
OLE DB对ODBC进行了两方面的扩展:一是提供了数据库编程的OLE接口即COM,二是提供了一个可用于关系型和非关系型数据源的接口。
OLE DB提供了COM接口,与传统的数据库接口相比,有更好的健壮性和灵活性,具有很强的错误处理能力,能够同非关系数据源进行通信。
与ODBC API一样,OLE DB也属于底层的数据库编程接口,OLE DB结合了ODBC对关系数据库的操作功能,并进行扩展,可以访问非关系数据库。
OLE DB访问数据库的原理如下:
OLE DB程序结构:
OLE DB由客户(Consumer)和服务器(Provider)。客户是使用数据的应用程序,它通过OLE DB接口对数据提供者的数据进行访问和控制。OLE DB服务器是提供OLE DB接口的软件组件。根据提供的内容可以分为数据提供程序(Data Provider)和服务提供程序(Service Provider)。
程序结构原理图如下:
<1> 数据提供程序
数据提供程序拥有自己的数据并把数据以表格的形式呈现给使用者使用.
<2> 服务提供程序
服务提供程序是数据提供程序和使用者的结合。它是OLE DB体系结构中的中间件,它是OLE DB数据源的使用者和数据使用程序的提供者
<3> 数据使用程序
数据使用程序对存储在数据提供程序中的数据进行使用和控制.
OLE DB开发程序的一般步骤:
<1> 初始化COM环境
<2> 连接数据源
<3> 打开对话
<4> 执行命令
<5> 处理结果
<6> 清除对象
使用OLE DB接口编程属于最低可能层,代码冗长并且很难维护。因此MS Visual Studio对OLE DB进一步抽象和封装,提供COM OLE DB Templates这个可行的中间层,从而简化了OLE DB应用程序的编写。
OLE DB Templates编写客户数据库程序方法:
<1>以MFC AppWizard为向导建立应用程序框架,添加OLE DB支持的头文件,然后使用OLE DB类进行数据库应用开发。
<2>以ATL COM AppWizard为向导建立应用程序框架,该框架直接支持OLE DB模板类。
OLE DB Templates包括:Consumer Templates和Provider Templates。
(1) Consumer Templates使用者模板
使用者模板(Consumer Templates)体系结构:
(2) Provider Templates服务器模板
服务器模板类体系结构:
在VB中,用户可以使用3种数据访问接口,即ActiveX数据对象(ADO)、数据访问对象(DAO)和远程数据对象(RDO),其中ADO属于最新的技术,它代表了Microsoft公司未来的数据访问策略,也是最简单、最灵活的数据访问接口。
与Data控件相比,ADO控件的功能更强,而且能够连接任何符合OLEDB(一种数据访问的技术标准)规范的数据源,数据源可以是本地的或远程的各种数据库,也可以是电子邮件数据、Web上的文本或图形等。
ADO(ActiveX Data Object,ActiveX数据对象)是MS为最新和最强大的数据访问接口OLE DB而设计,是一个便于使用的应用程序层接口。ADO是一种面向对象的、与语言无关的(Language_Neutral)数据访问应用编程接口。它对OLE DB API进行封装,实现对数据的高层访问,同时它也提供了多语言的访问技术,此外,由于ADO提供了访问自动化接口,它也支持脚本语言。
ADO最主要的优点在于易于使用、速度快、内存支出少和磁盘遗迹小。ADO是用来访问OLE DB的数据库技术。在模型层次上它基于OLE DB,但在应用上又高于OLE DB,因此它简化了对对象模型的操作,并且不依赖于对象之间的相互层次关系。但是OLE的接口可以数据提供程序、服务提供程序和数据使用程序使用,而ADO所提供的对象只能被数据应用程序使用。并且,ADO对象使用了OLE DB服务提供程序和OLE DB数据提供程序所提供的接口和服务。
(1)ADO访问数据库的结构原理图:
(2)ADO对象模型:
ADO对象模型包括以下关键对象:
<1>Connection对象:在数据库应用里操作数据源都通过该对象,这是数据交换的环境,代表与数据源的一个会话。
<2>Command对象:是一个对数据源执行命令的定义。
<3>Parameter对象:用于制定参数化查询或者存储过程的参数。
<4>Recordset对象:是执行结果集存储到本地的ADO对象。
<5>Field对象:ADO中对列进行操作的对象。
<6>Error对象:对ADO数据操作时发生错误的详细描述。
<7>Property对象:代表一个由提供者定义的ADO对象的动态特征。
ADO对象编程模型:
Parameters
Collection
Execute
Source
Error Collection
(Optional) Active Fields
Connection Collection
(3)ADO编程一般步骤:
<1>创建一个Connection对象。
<2>打开数据源,建立同数据源的连接。
<3>执行一个SQL命令。
<4>使用结果集。
<5>终止连接。
(4)ADO的数据库访问规范
引入ADO支持
#import Program Files/Common Files/System/ado/msado*.dll
初始化和释放ADO环境:
CoInitialize(NULL);
CoUninitialize();
ADO.NET是一组用于和数据源进行交互的面向对象类库。
ADO.NET的主要对象有哪些?
Connection :用于连接到数据库和管理对数据库的事务;
Command :用于对数据库发出SQL命令;
DataReader :用于从数据源读取只进数据记录流;
DataSet :用于对单层数据、XML数据和关系数据进行存储、远程处理和编程;
DataAdapter :用于将数据推入DataSet,并使数据与数据库保持一致;