随着资料库技术的广泛套用,开发各种资料库应用程式已成为计算机套用的一个重要方面。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等方法。资料库编程需要掌握一些访问资料库技术方法,还需要注意怎幺设计高效的资料库、资料库管理与运行的最佳化、资料库语句的最佳化。
基本介绍
- 中文名:资料库编程
- 外文名:Database Programming
- 套用领域:资料库、计算机等
- 主流资料库:Oracle, MS SQL Server等
- 客户端编程:ODBC API、ADO等
- 资料库类型:网状资料库层次资料库关係资料库
资料库的基本概念
资料库按其结构可分为三种类型:网状资料库、层次资料库和关係资料库。其中关係资料库是一种套用最广泛的资料库。
访问资料库技术方法
资料库编程分为资料库客户端编程与资料库伺服器端编程。资料库客户端编程主要使用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资料库编程几种方法
VC资料库编程几种方法,包括ODBC连线、MFC ODBC连线、DAO连线、OLEDB、OLE DB Templates连线、ADO、Oracle专用方法(OCI(OracleCallInterface)访问、OracleObjectOLEC++ClassLibrary )。
ODBC连线
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编程属于底层编程。
<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是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连线
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用于接收资料库操作异常的类.
(7)CDaoFieldExchange
DAO提供了很好的资料库编程的对象模型.但是,对资料库的所有调用以及输出的数据都必须通过Access/Jet资料库引擎,这对于使用资料库应用程式,是严重的瓶颈。
DAO相对于ODBC来说,属于高层的资料库接口.
(1)CdaoWorkspace:对DAO工作区(资料库处理事务管理器)的封装
(2)CdaoDatabase:对DAO资料库对象的封装,负责资料库连线.
(3)CdaoRecordset:对DAO记录集对象的封装,代表所选的一组记录.
(4)CdaoTableDef:对表定义对象的封装,代表基本表或附加表定义.
(5)CdaoQueryDef:对查询对象的封装,包含所有查询的定义.
(6)CdaoException:DAO用于接收资料库操作异常的类.
(7)CDaoFieldExchange
DAO提供了很好的资料库编程的对象模型.但是,对资料库的所有调用以及输出的数据都必须通过Access/Jet资料库引擎,这对于使用资料库应用程式,是严重的瓶颈。
DAO相对于ODBC来说,属于高层的资料库接口.
OLE DB连线
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 Templates连线
使用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伺服器模板
伺服器模板类体系结构:
ADO连线
在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对象模型包括以下关键对象:
<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是一组用于和数据源进行互动的面向对象类库。
ADO.NET的主要对象有哪些?
Connection :用于连线到资料库和管理对资料库的事务;
Command :用于对资料库发出SQL命令;
DataReader :用于从数据源读取只进数据记录流;
DataSet :用于对单层数据、XML数据和关係数据进行存储、远程处理和编程;
DataAdapter :用于将数据推入DataSet,并使数据与资料库保持一致;