利用Dao访问数据库

上传人:re****.1 文档编号:490868126 上传时间:2022-12-22 格式:DOCX 页数:20 大小:21.73KB
返回 下载 相关 举报
利用Dao访问数据库_第1页
第1页 / 共20页
利用Dao访问数据库_第2页
第2页 / 共20页
利用Dao访问数据库_第3页
第3页 / 共20页
利用Dao访问数据库_第4页
第4页 / 共20页
利用Dao访问数据库_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《利用Dao访问数据库》由会员分享,可在线阅读,更多相关《利用Dao访问数据库(20页珍藏版)》请在金锄头文库上搜索。

1、VC+数据库访问DAOMFC DAO在编程方法上并没有太多的不同,例如在这 里以类CDaoDatabase代替了前面的CDatabase,以CDaoRecordSet代替了 CRecordSet等。但两者也不是 完全一样,依据用户使用的数据系统不同,选择不同 接口会导致应用性能方面的较大差异,例如要通过Microsoft Jet 数据引擎访问 Microsoft Access 数据 库,使用DAO就会有显著的性能优势。另外,DAO接 口还有其他一些特点,比如可以通过DAO访问数据库 中的数据和数据库的定义,而且,DAO本身就是一组 COM接口,加上MFC的封装,在很程度上会简化编程。1。MFC

2、 DAO与数据库DAO数据访问对象,提供了一种通过程序代码创建 和操作数据库的机制。要向深入了解DAO创建和操作 数据库的手段,必须先对Microsoft Jet数据引擎有 一定的了解。简单的说,Microsoft Jet是一种数据 管理组件,许多数据库工具(如Access等)都是通 过它实现其功能的,同时,通过Jet引擎可以访问数 据库中的数据和数据库结构定义。DAO通过Microsoft Jet数据引擎提供了一套对象,包括:数据库对象(Database)、表定义(TableDef)、查询定义对象(QueryDef)和记录集对象(Recordset)等。MFC DAO 封装了 DAO的功能,

3、说到底是通过Microsoft Jet数 据引擎来访问系统和用户数据库中的数据。一般来说,基于DAO的MFC类比基于ODBC的MFC类 处理能力更强。因为基于DAO的类可以通过ODBC驱 动,也可以通过自己的数据库引擎(Jet)存取数据。 下面举例说明常见的数据库的访问方式与技巧。首先 介绍 CDaoDatabase 类以及 CDaoDataBase:Open()函 数。类 CDaoDatabase 提供了一个和 MFC ODBC 类 CDatabase 类似的接口。但是它们之间也有区别,表现在CDatabase是通过ODBC和ODBC驱动程序存取数据的,liiJ而CDataDatabase则

4、是通过数据存取对象存取数据的。通过DAO访问不同的数据库的关键在于liiJCDaoDatabase:Open()函数。该函数的原型如下:Open(LPCTSTR lpszName,BOOL bExclusive=FALSE,BOOL bReadOnly=FALSE,LPCTSTR lpszConnect=_T();lpszName-要打开的数据库路径。bExclusive-以独占方式(TRUE)或共享方式(FALSE)打开。bReadOnly-以只读方式(TRUE)或读/写方式(FALSE) 打开。lpszConnect -说明连接数据库的属性字段(这就是 “关键”所在)。下面介绍DAO如何访

5、问两个常用的数据源: 1)Access数据库 这是Microsoft Jet数据引擎能够读取的数据库中,最高Access数据库的方法最简单,只要Open()函数给出通过DAO访问效率最高的数据库(.mdb)之一。访问第一个参数,其他三个参数都缺省就表示打开一个Access数据库,这里就不举例了。2)ODBC数据源liiJ通过DAO访问ODBC数据源必须同时具有相应的ODBC 驱动程序。ODBC数据库包括SQL Server,Oracle Server 等。例如,可以用 Class Wizard 从 CDaoRecordSet 派生 一个新类,这个新类可以访问ODBC数据源。2.处理DAO对象1

6、)异常处理对数据库的错误操作经常会引发异常,利用MFC DAO 进行的数据库编程也一样,这里首先给出DAO异常处 理函数,以备后文使用。void DispDaoException(CDaoException *e)(CString str;if(e-m_pErrorInfo!=NULL)(str.Format(_T(%s (%d)nn)_T(Would you like to reference?),(LPCTSTR)e-m_pErrorI nfo-m_strDescription,e-m_pErrorInfo-m_lErrorCode);if(AfxMessageBox(str,MB_YES

7、NO)=IDYES)(WinHelp(GetDesktopWindow(),e-m_pErrorInfo-m_strHelpFile,HELP_CONTENT, e-m_pErrorIn fo-m_lHelpContent);else(str.Format( _T(ERROR:CDaoExcepti onnn)_T(SCODE_CODE =%dn) _T(SCODE_FACILITY =%dn)_T(ResultFromScode=% dn),SCODE_CODE(e-m_scode ),SCODE_FACILITY(e-m_s code),SCODE_SEVERITY(e-m_scode),

8、ResultFromScode(e-m_scode);AfxMessageBox(str);2) 数据库对象在MFC中,DAO数据库对象是由CDaoDatabase类封装 的,它代表了与数据库的连接,只有通过这个连接, 应用程序才能实现对数据库的操作。(1) 新建数据库创建一个数据库的基本思路是先用CDaoDatabase类 构造一个空的数据库对象,然后调用CDaoDatabase 类的Create()函数创建新的数据库。下面就来介绍创 建mdb数据库的方法: CDaoDatabase db;try(db.Create(d:worktest.mdb);全路径DispDaoException(e

9、);e-Delete();return;catch(CMemoryException*e)/内存异常处理从Create()函数的原型中可以选择更多的创建数据 库的限制条件。(2) 打开数据库跟创建数据库类似,打开一个现有的数据库应用应该 先用CDaoDatabase类构造一个空的数据库对象,然 后用CDaoDatabase类的Open()函数打开数据库。具 体代码实现如下: CDaoDatabase db;try(db.Create(d:worktest.mdb);/全路径catch(CDaoException * e)DispDaoException(e);e-Delete();return

10、;catch(CMemoryException*e)(内存异常处理需要说明的是,一般情况下,只要路径名正确,创建 和打开数据库都不会出什么异常,但是为了程度的鲁 棒性,在开发真是应用软件时,这些异常是非常必要 的。(3) 关闭数据库数据库对象使用完毕后需要关闭该对象,以免数据库 中的数据会发生意外的丢失或改变,这与打开一个文 件操作完毕后需要关闭文件的道理是一样的。要关闭 一个数据库,只要调用CDaoDatabase类的Close() 函数即可,具体实现如下:if (db.IsOpen()db.Close();3) 表定义对象上面已经说明了如果建立和打开数据库,而数据库是 由表组成的,因此这一

11、部分继续介绍表的操作。CDaoTableDef类对象封装了 DAO表定义结构,该对象 定义俩基础表和附加表。所谓基础表是Microsoft Jet 数据库中的表,使用DAO对象可以操作表的结构,可 以利用记录集或查询修改其中的数据,而附加表是指 连接到Microsoft Jet数据库中的其他数据库表,附 加表中的数据依然存放在外部数据库中。(1)新建表=1创建表定义对象的同时也为所操作的数据库增加一 个新表,创建表定义后还需要接着为其添加字段(域),如果有必要还可以添加索引,否则这个表不 能被加入到数据库的。新建一个表定义对象的过程如 下:首先打开一个数据库,然后在数据库上使 CDaoTabl

12、eDef的构造函数构造一个表定义对象,然后 用Create()函数创建新表(加入字段),最后调用 Append()函数将新表加入到数据库中,为节省篇幅, 异常处理部分仅用“异常处理.”代替。 if(!db.IsOpen()要进行下面的操作,数据库必须打开,db代表要操作的数据库return;构造表CDaoTableDef td(&db); 对象 创建新表 try (td.Create(PERSONNEL);异常处理/加入字段“ EMPLOYEE_ID”try(tdCreateField(EMPLOYEE_ID”,dbLong,d bAutoIncrField);/异常处理加入字段” EMPLO

13、YEE_NAMEtry(td.CreateField(EMPLOYEE_NAME,dbText ,10,dbVariableField);/异常处理/表表加入到库中try( td.Append();异常处理td.Close();注意,表也要关闭 if(db.IsOpen()db.Close();(2)打开表首先打开表所在的库,然后在该库上调用CDaoTableDef的构造函数定义一个表对象,然后用 Open()函数打开表: if(!db.IsOpen()/要进行下面的操作,数据库必须打开,db代表要操作的数据库 return;CDaoTableDef td(&db);构造表对象 /打开表 tr

14、ytd.Open(PERSONNEL);异常处理(3)修改表的结构修改表的结构包括表中添加、删除字段,或者对某一 字段添加、删除索引。其操作过程是,先打开表所在 的数据库,然后打开表,最后调用CDaoTableDef:CDaoTableDef:CDaoTableDef:CDaoTableDef:if(!db.IsOpen()ininjjCreateField()和 DeleteField()添加、删除字段,用CreateIndex()和 DeleteIndex()添加、删除索引。要进行下面的操作,数据库必须打开,db代表要操作的数据库ininreturn;CDaoTableDef td(&db);对象打开表try构造表td.Open(PERSONNEL);异常处理/加入字段” EMPLOYEE_ADDRESS”trytdCreateField(EMPLOYEE_ADDRESS”,dbT ext,45,dbVariableField);异常处理III(4)删除表IIIIII删除表会表表的定义和表中的数据一起删除。if(db.IsOpen()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号