MFC界面编程基础(22):MFC ODBC连接数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17017545/article/details/85233461
上一篇:MFC界面编程基础(21):一个简单的CArchive类用法的示例(Ex_Archive) 下一篇:MFC界面编程基础(23):创建并注册数据源

ODBC是微软公司支持开放数据库服务体系的重要组成部分,它定义了一组规范,提供了一组对数据库访问的标准API,这些API是建立在标准化版本SQL(Structed Query Language,结构化查询语言)基础上的。ODBC位于应用程序和具体的DBMS之间,目的是能够使应用程序端不依赖于任何DBMS,与不同数据库的操作由对应的DBMS的ODBC驱动程序完成。

ODBC的构成

ODBC的层次结构图如下图所示
在这里插入图片描述

  • ODBC管理器
    ODBC管理器的主要任务是管理安装ODBC驱动程序,管理数据源。应用程序要访问数据库,首先必须在ODBC管理器中创建一个数据源。ODBC管理器根据数据源提供的数据库存储位置,类型及ODBC驱动程序信息,建立起ODBC与一个特定数据库之间的联系,接下来,程序中只需提供数据源名,ODBC就能连接相关的数据库。ODBC管理器位于系统控件面板中。
  • 驱动程序管理器
    驱动器管理器位于ODBC32.DLL,是ODBC中最重要的部件,应用程序通过ODBC API执行数据库操作。其实ODBC API不能直接操作数据库,需要通过驱动管理器调用特定的数据库的驱动程序,驱动程序在执行完相应操作后,再将结果通过驱动程序管理器返回。驱动器管理器支持一个应用程序同时访问多个DBMS中的数据。
  • ODBC驱动程序
    ODBC驱动程序以DLL文件形式出现,提供ODBC与数据库之间的接口。

MFC ODBC类

进行ODBC编程,有三个非常重要的元素:环境(Enviroment),连接(Connection)和语句(Statement),它们都是通过句柄来访问的。在MFC的类库中,CDatabase类封装了ODBC编程的连接句柄,CRecordset类封装了对ODBC编程的语句句柄,而环境句柄被保存在一个全局变量中,可以调用一个全局函数AfxGetHENV来获得当前被MFC使用的环境句柄。
此外CRecordView类负责记录集的用户界面,CFieldExchange负责CRedordset类与数据源的数据交换。
使用AppWizard生成应用程序框架过程中,只要选择了相应的数据库支持选项,你就能够很方便地获得一个数据库应用程序的框架.

  • CDatabase类
    CDatabase类的主要功能是建立与ODBC数据源的连接,连接句柄放在其数据成员m_hdbc中,并提供一个成员函数GetConnect()用于获取连接字符串。要建立与数据源的连接,首先创建一个CDatabase对象,再调用CDatabase类的Open()函数创建连接。Open()函数的原型定义如下:
	virtul BOOL Open(LPCTSTR lpszDSN,
	BOOL bExclusive=FALSE, 
	BOOL bReadOnly=FALSE,
	LPCTSTR lpszConnect=”ODBC;”,
	BOOL bUseCursorLib=TRUE);

其中:
lpszDSN指定数据源名,若lpszDSN的值为NULL时,在程序执行时会弹出数据源对话框,供用户选择一个数据源。
lpszConnect指定一个连接字符串,连接字符串中通常包括数据源名、用户ID、口令等信息,与特定的DBMS相关。
例如:

CDatabase db;
db.Open(NULL,FALSE,FALSE,“ODBC;DSN=HotelInfo;UID=SYSTEM;PWD=123456”);

从断开与一个数据源的连接,可以调用CDatabase类的成员函数Close()。

  • CRecordset类
    CRecordset类对象表示从数据源中抽取出来的一组记录集。CRecordset类封装了大量操作数据库的函数,支持查询,存取,更新数据库操作。
    记录集主要分为两种类型:

①:快照(Snapshot)记录集
快照记录集相当于数据库的一张静态视图,一旦从数据库抽取出来,当别的用户更新记录的操作时不会改变记录集,只有调用Requry()函数重新查询数据,才能反映数据的变化。自身用户的添加记录操作重要调用Requry()函数重新查询数据,但快照集能反应自身用户的删除和修改操作。
②:动态(Dynaset)记录集
动态(Dynaset)记录集与快照记录集恰恰相反,是数据库的动态视图。当别的用户更新记录时,动态记录集能即时反映所作的修改。在一些实时系统中必须采用动态记录集,如火车标联网购票系统。但别的用户添加记录,也需要调用Requry()函数重新查询数据后才能反映出来。
CRecordset有六个重要的数据成员如下表所示.。
在这里插入图片描述
CRecordset的主要成员函数如下表所示:
在这里插入图片描述

  • CRecordView类
    CRecordView类是CFormView的派生类,支持以控件视图来显示当前记录,并提供移动记录的默认菜单和工具栏,用户可以通过记录视图方便地浏览、修改、删除和添加记录。记录视图与对话框一样使用DDX数据交换机制在视图中的控件的记录集成员之间交换数据,只需使用ClassWizard将控件与记录集的字段数据成员一一绑定。
    CRecordView的主要函数如下表所示:
    在这里插入图片描述
  • CFieldExchange类

CFieldExchange类支持记录字段数据的自动交换,实现记录集中字段数据成员与相应的数据源中字段之间的数据交换,类似于对话框数据自动交换机制。

上一篇:MFC界面编程基础(21):一个简单的CArchive类用法的示例(Ex_Archive) 下一篇:MFC界面编程基础(23):创建并注册数据源

猜你喜欢

转载自blog.csdn.net/qq_17017545/article/details/85233461
今日推荐