当前位置:编程学习 > VC++ >>

用VC++开发ODBC数据库应用

 

 

 

ODBC概述

ODBC即开放式数据库互连(Open Database Connectivity)是用于访问数据库的

统一界面标准。它包含一组可扩展的动态链接库,为我们提供了一个标准的数

据库应用的程序设计接口,可以通过它编写对数据库进行增、删、改、查和维

护等操作的应用程序。

 

在ODBC的DLL之下安装不同数据库的驱动程序,开发人员可以访问不同的数据

库资源。由于ODBC是基于关系数据库的结构化查询语言SQL而设计的,在ODBC

层之上的应用程序看来,各个异构关系数据库只是相当于几个不同的数据源

(如图所示),而这些数据源的组织结构之不同对于程序员来说是透明的,所以

我们就可以编写独立于数据库的访问程序。

 

大多数的数据库在进行设计时都遵守SQL标准,这使应用可以利用SQL标准对

不同的数据源进行操作。我们可以发出SQL命令,由ODBC发给数据库,数据库

再将结果经过ODBC返回给应用程序。

 

使用ODBC编程必须先建立环境、连接、语句三个句柄,环境句柄建立从应用

到ODBC的联系,连接句柄建立ODBC Driver到数据源的组合关系,当连接句柄

建立后,应用程序要建立一个语句句柄以执行SQL语句。接下来调用执行函数

就可以查询或更新数据库的表,若查询语句较为特殊,它会返回一个结果集,

需要程序员对此结果集做处理。将应用程序关闭时,首先要将语句句柄释放,

然后释放连接句柄,最后释放ODBC环境句柄。

 

结果集是符合查询条件的记录的集合,保存在一段内存中。程序员建立结果集

与用户变量的联系,使结果集中的每一列与用户申请的变量一一对应,以便程

序员对结果集进行操作, 建立这个联系的动作叫绑定(Binding)用VC++4.0开

发ODBC应用程序时,可利用开发系统提供的MFC类以节省大量工作。MFC为ODBC

编程提供两个类:CDatabase类和CRecordset类。CData base类主要封装与数

据源的连接工作,CRecordset类封装数据源的表与用户内存的绑定工作。

 

使用MFC编写ODBC应用程序依对库的绑定时间分为两类:静态绑定、动态绑定。

静态绑定是在程序编译时绑定的一个表;动态绑定是指绑定发生于程序运行时。

静态绑定的应用程序容易编写,但由于绑定的动作发生在编译时,只能对已知的

表进行绑定。动态绑定对用户来说较为方便,而程序员也可以对表进行较多、

较灵活的操作。以下将分别介绍动态绑定和静态绑定,本文的重点是介绍动

态绑定。

 

静态绑定

 

静态绑定的编程步骤如下:

 

1.利用VC++的应用向导制作一个应用程序框架所需的代码,其中数据库支持

部分应选择Header File only。

 

2.利用VC++的类向导加入一个由CRecordset类派生的用户记录集类(假定Cset)。

按下Create Class按钮,系统会弹出两个对话框分别让用户选择数据源和表。

 

3.输出结果。

 

数据源和表由类向导确定之后,系统会自动将选定的表绑定在Cset类上,即为

Cset类建立几个数据成员变量,分别对应表的各个列。各数据库的数据类型

与VC++的记录集类的数据成员变量类型的对应关系如下表所示。

 

然后,类向导还要覆写CRecordset类的三个虚拟函数:DoFieldExchange、

GetDefaultSQ L和GetDefaultConnect。至此,静态绑定就完成了。前面曾提

到,查询操作返回结果集包含被查询表中的符合查询条件的记录。派生记录集

类Cset的数据成员变量分别对应数据库的一个字段,它们的组合就是一个记录。

调用游标定位函数使Cset类定位于某一行。类封装的增、删、改函数可修改、

删除当前行,对各个成员变量做输出处理可实现查询功能。

 

静态绑定技术减少了程序员工作量。但是由于表必须编译前确定,每建立一个

新表应用程序都要重新编译以绑定此表;表结构也由类向导固定在CRecordset

的派生类中,已经绑定的表一旦结构被修改应用程序也都要重新编译以绑定此表。

静态绑定的缺点用动态绑定正好可以克服。

 

动态绑定

 

动态绑定在运行时对一个表进行绑定,可以使同一个应用程序能够针对不同的表

提供服务。动态绑定一个表需要做到以下两点:知道选定的数据源包含有哪些表,

以便确定用户要访问的表是否存在;得到表结构的信息,确定申请多少内存以及申

请什么类型的内存,以便与表相对应。

 

在VC++4.0系统的安装光盘的目录SAMPLESMFCDATABASECATALOG下有

补充:软件开发 , Vc ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,